.net - 为什么 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
计算睡眠时间?
解决方案
这是因为 Elapsed 属性返回一个 TimeSpan,而该 TimeSpan 的 Milliseconds 属性非常小。如果您使用 ElapsedMilliseconds 属性,您应该会看到一个不错的值。
[编辑] 您也可以使用 timer.Elapsed.TotalMilliseconds,(它是一个浮点数,而不是一个整数)。
推荐阅读
- javascript - 出于什么原因,React-Redux 中的调度首先被调用而不是另一个
- perl - Perl TLS SMTP 发送在身份验证步骤失败
- c# - 动态使用 linq 搜索列表
- c# - C#让每个字母后面都有一个空格
- c# - 如何将两个 Datagridview 列一起移动
- c# - 如何在不移动文本的情况下更改 TextBlock 的边距?
- jpa - 没有索引的 JPA 属性
- oracle - 在 ColdFusion 中显示数据库中的 BLOB 文件
- swiftui - 为什么部分框架不会调整大小以显示列表内容
- mongodb - Mongoose 填充文档在 MongoDB Compass 中不可见