Task.Delay
在内部使用System.Threading.Timer
。主要问题是System.Threading.Timer
我的申请没有阻止?如果我做:
await Task.Delay(15)
代码是否会使用线程15ms?或者它会使用操作系统进行回调。哪里可以找到相关信息?
答案 0 :(得分:4)
根据杰弗里里希特(第748页)的说法:
在内部,线程池只有一个用于所有Timer对象的线程。该线程知道下一个Timer对象的时间到期。当下一个Timer对象到期时,线程唤醒,并在内部调用ThreadPool的QueueUserWorkItem以输入线程池队列中的条目,从而导致调用回调方法。
这意味着在执行计时器时,您将至少有两个工作线程:一个 - 内部用于计时器,另一个用于实际工作进程。