在Async/Await FAQ中,Stephen Toub说:
一个awaitable是任何类型的,它公开
GetAwaiter它返回一个有效的方法awaiter.
...
一个awaiter是任何从一个返回类型awaitable的GetAwaiter方法和符合特定的图案.
因此,为了成为awaiter,类型应该:
INotifyCompletion接口.IsCompleted.GetResult返回void或无参数的方法TResult.(我现在忽略ICriticalNotifyCompletion了.)
我知道我提到的页面有一个示例,显示编译器如何转换等待操作,但我很难理解.
当我等待的awaitable,
IsCompleted检查?我应该在哪里设置它?OnCompleted召唤?OnCompleted?OnCompleted和Task.Run(continuation)在不同示例中使用的示例,我应该选择哪个以及为什么?