我已经了解到,建议使用Task.Delay()进行等待而不是阻塞调用线程(与Task.Delay().Wait()和Thread.Sleep()相反)。但是随着我的异步/等待知识的增加,我有一种感觉,即所有它所做的就是将可等待任务转移到另一个线程上执行。
因此,我是否理解正确:等待Task.Delay()不会阻塞调用线程,但它会阻塞某些线程,其中可等待任务被转移?
如果这个说法是正确的,那么你能否为我提供一种方法,让任务在等待时不会阻塞任何线程?
我已经了解到,建议使用Task.Delay()进行等待而不是阻塞调用线程(与Task.Delay().Wait()和Thread.Sleep()相反)。但是随着我的异步/等待知识的增加,我有一种感觉,即所有它所做的就是将可等待任务转移到另一个线程上执行。
因此,我是否理解正确:等待Task.Delay()不会阻塞调用线程,但它会阻塞某些线程,其中可等待任务被转移?
如果这个说法是正确的,那么你能否为我提供一种方法,让任务在等待时不会阻塞任何线程?
await
而注册的继续操作。await
只是简单地转换为:
GetAwaiter
,以获取等待者。await
表达式的末尾继续执行。Delay()
返回一个 Task
,并且该任务在一秒钟后完成...并不像这是一个实际上正在执行任何操作的任务。如果您熟悉 System.Timers.Timer
(或类似的内容),那么就像那样。 - Jon SkeetDelay()
任务被发送到的线程可以用来处理其他任务,而Delay()
正在进行中?- cubrman 8月15日下午10:19