【发布时间】:2017-01-19 02:47:40
【问题描述】:
似乎任何实现GetAwaiter 要求的对象都可以等待,Task<> 类型只是满足此要求的众多可能类型之一。但是,据我所知,async 方法似乎只能返回Task<> 或void。是否可以将我的自定义任务与等待类型挂钩,因此我可以将自定义等待类型指定为异步返回类型,然后我当然可以随后将await 正常链接到调用链。类似于:(伪代码)
async MyAwaitable MyAwaitableMethod()
{
await myAwaitable;
}
async Task MyTask()
{
await MyAwaitableMethod();
}
背景信息:整个想法实际上源于 C++1z/2x 协程提案,它具有基本相同的基本模型,但它允许在定义任何具有嵌入的类型时进行更多控制promise_type 从协程返回(作为co_await 的结果)。
[编辑]
除了答案中提供的链接外,我在以下链接中找到了更多信息,似乎确实有一些关于这个话题的热门讨论:
- https://github.com/dotnet/roslyn/issues/7169
- https://github.com/dotnet/roslyn/issues/10902
- https://github.com/ljw1004/roslyn/blob/features/async-return/docs/specs/feature%20-%20arbitrary%20async%20returns%20-%20discussion.md
[EDIT2]
令人惊讶的是,经过进一步挖掘,这实际上是 C# 7.0 的一个前瞻性特性:http://intellitect.com/generalized-async-return-types/
【问题讨论】:
标签: c# async-await