Thread.Sleep() 与 Task.Delay().Wait()

问题描述 投票:0回答:1

异步方法中的代码库是这样的:

Thread.Sleep(500);

一位同事将其重构为这样:

Task.Delay(500).Wait();

考虑到相对较小的延迟,使用异步版本真的有优势吗(

Task.Delay()
)?
如果延迟是几毫秒或几秒,它会改变吗?
更重要的是...不是
.Wait()
击败他创建异步的目的吗?

为了提供更多上下文,这是在平均每分钟运行一次的后台进程中执行的。

第二种方法不是浪费更多资源吗? (正如一些评论这里似乎表明的那样)

c# .net task task-parallel-library thread-sleep
1个回答
6
投票
await Task.Delay(500);

你应该几乎从不使用

.Wait()
,但
Task.Delay(...).Wait()
是一个特殊的“不”圆圈。

如果您愿意阻塞当前线程,则

Thread.Sleep(...)
ok;不过,您不应该在并发应用程序(例如服务器)上执行此操作。


是的,在某些情况下这是可以接受甚至是必要的;但是如果你必须问:“不”是一个很好的默认答案;对此的任何完整答案都涉及多页上下文、细微差别等。

© www.soinside.com 2019 - 2024. All rights reserved.