Task.Delay是否无阻塞?

时间:2013-01-13 18:26:01

标签: .net asynchronous task-parallel-library

Task.Delay在内部使用System.Threading.Timer。主要问题是System.Threading.Timer我的申请没有阻止?如果我做:

await Task.Delay(15)

代码是否会使用线程15ms?或者它会使用操作系统进行回调。哪里可以找到相关信息?

1 个答案:

答案 0 :(得分:4)

根据杰弗里里希特(第748页)的说法:

  

在内部,线程池只有一个用于所有Timer对象的线程。该线程知道下一个Timer对象的时间到期。当下一个Timer对象到期时,线程唤醒,并在内部调用ThreadPool的QueueUserWorkItem以输入线程池队列中的条目,从而导致调用回调方法。

这意味着在执行计时器时,您将至少有两个工作线程:一个 - 内部用于计时器,另一个用于实际工作进程。