异步方法中的代码库是这样的:
Thread.Sleep(500);
一位同事将其重构为这样:
Task.Delay(500).Wait();
考虑到相对较小的延迟,使用异步版本真的有优势吗(
Task.Delay()
)?.Wait()
击败他创建异步的目的吗?
为了提供更多上下文,这是在平均每分钟运行一次的后台进程中执行的。
第二种方法不是浪费更多资源吗? (正如一些评论这里似乎表明的那样)
await Task.Delay(500);
你应该几乎从不†使用
.Wait()
,但Task.Delay(...).Wait()
是一个特殊的“不”圆圈。
如果您愿意阻塞当前线程,则Thread.Sleep(...)
是ok;不过,您不应该在并发应用程序(例如服务器)上执行此操作。
† 是的,在某些情况下这是可以接受甚至是必要的;但是如果你必须问:“不”是一个很好的默认答案;对此的任何完整答案都涉及多页上下文、细微差别等。