use*_*000 4 .net c# asynchronous async-await
我正在查看 MSDN 文档,它说
异步方法有三种可能的返回类型:
Task<TResult>,Task,和void。
https://msdn.microsoft.com/en-us/library/mt674893.aspx
但是,我记得在其他地方读到可以写入await自定义等待者。我如何调和这两个事实?
await支持任何类型的“awaitable”,它们是遵循某种模式(GetAwaiter等)的对象实例。
async生成一个状态机,它只知道如何创建Task/Task<T>等待(或返回void)。
因此,您可以创建自己的自定义可等待对象并返回它,但您必须明确地这样做。你不能async用来做。
编译器团队目前正在考虑添加ValueTask对async. 这将允许您使用遵循模式的“异步方法构建器”。然后,您就可以使用async和await操作任何类型的“类任务”类型。不幸的是,它仍然不允许async方法返回接口类型,尽管 - 为此需要更改语言的其他部分。