iRumba Asked:2020-04-05 10:28:23 +0000 UTC2020-04-05 10:28:23 +0000 UTC 2020-04-05 10:28:23 +0000 UTC Wait()在Task中是如何实现的? 772 我怀疑它Task.Wait()里面有循环while。但它是如何实施的呢?通过狡猾的洛基? c# 1 个回答 Voted Best Answer andreycha 2020-04-05T16:47:53Z2020-04-05T16:47:53Z 我怀疑 Task.Wait() 内部有一个 while 循环。 我们开放源代码,我们阅读并找到一个方法SpinThenBlockingWait()。甚至从方法的名称也可以看出,方案如下:首先,进行一次小的自旋(其实就是同一个“while 循环”),希望任务能够完成。如果任务还没有完成,请继续等待:任务被分配了一个发出信号的延续ManualResetEvent,并Wait()在它工作时结束ManualResetEvent。 根据这个方案——自旋,然后离开等待——许多同步对象工作。自旋很便宜,同步很昂贵。因此,我们可以旋转一段时间等待所需的事件,特别是如果我们假设它有很大的机会很快到来,然后进入同步。
我们开放源代码,我们阅读并找到一个方法
SpinThenBlockingWait()
。甚至从方法的名称也可以看出,方案如下:首先,进行一次小的自旋(其实就是同一个“while 循环”),希望任务能够完成。如果任务还没有完成,请继续等待:任务被分配了一个发出信号的延续ManualResetEvent
,并Wait()
在它工作时结束ManualResetEvent
。根据这个方案——自旋,然后离开等待——许多同步对象工作。自旋很便宜,同步很昂贵。因此,我们可以旋转一段时间等待所需的事件,特别是如果我们假设它有很大的机会很快到来,然后进入同步。