首页 > 解决方案 > 为什么 Thread.Sleep 不在秒表中注册?

问题描述

我有以下程序:

open System.Diagnostics
open System.Threading

[<EntryPoint>]
let main _ =
    let timer = Stopwatch ()
    printfn "begin"
    timer.Start ()
    Thread.Sleep 5000
    timer.Stop ()
    printfn "end"
    printfn "%i ms" timer.Elapsed.Milliseconds
    0

我期待它打印 5000 毫秒或更多的经过时间。它确实在打印“开始”和“结束”之间暂停了大约 5 秒。但它只打印“3 ms”左右。为什么不Stopwatch计算睡眠时间?

标签: .netf#sleepstopwatch

解决方案


这是因为 Elapsed 属性返回一个 TimeSpan,而该 TimeSpan 的 Milliseconds 属性非常小。如果您使用 ElapsedMilliseconds 属性,您应该会看到一个不错的值。

[编辑] 您也可以使用 timer.Elapsed.TotalMilliseconds,(它是一个浮点数,而不是一个整数)。


推荐阅读