相关疑难解决方法(0)

定制等待傻瓜

Async/Await FAQ中,Stephen Toub说:

一个awaitable是任何类型的,它公开GetAwaiter它返回一个有效的方法awaiter.
...
一个awaiter任何从一个返回类型awaitableGetAwaiter方法和符合特定的图案.

因此,为了成为awaiter,类型应该:

  • 实现INotifyCompletion接口.
  • 提供一个名为的布尔属性IsCompleted.
  • 提供一个GetResult返回void或无参数的方法TResult.

(我现在忽略ICriticalNotifyCompletion了.)

我知道我提到的页面有一个示例,显示编译器如何转换等待操作,但我很难理解.

当我等待awaitable,

  • 什么时候IsCompleted检查?我应该在哪里设置它?
  • 何时被OnCompleted召唤?
  • 哪个线程调用OnCompleted
  • 我看到了直接调用continuation参数OnCompletedTask.Run(continuation)在不同示例中使用的示例,我应该选择哪个以及为什么?

.net c# asynchronous async-await .net-4.5

25
推荐指数
2
解决办法
7841
查看次数

标签 统计

.net ×1

.net-4.5 ×1

async-await ×1

asynchronous ×1

c# ×1