C# C异步方法的返回类型是否可能不是Task或void?

C# C异步方法的返回类型是否可能不是Task或void?,c#,async-await,C#,Async Await,似乎任何实现GetAwaiter需求的对象都可以等待,任务类型只是满足此需求的许多可能类型之一。然而,据我所知,异步方法似乎只能返回Task或void。是否可以将我的自定义任务与等待类型连接起来,这样我就可以将我的自定义等待类型指定为异步返回类型,然后我当然可以随后正常地将等待链接到调用链上。类似于:伪代码 async MyAwaitable MyAwaitableMethod() { await myAwaitable; } async Task MyTask() { awa

似乎任何实现GetAwaiter需求的对象都可以等待,任务类型只是满足此需求的许多可能类型之一。然而,据我所知,异步方法似乎只能返回Task或void。是否可以将我的自定义任务与等待类型连接起来,这样我就可以将我的自定义等待类型指定为异步返回类型,然后我当然可以随后正常地将等待链接到调用链上。类似于:伪代码

async MyAwaitable MyAwaitableMethod()
{
    await myAwaitable;
}

async Task MyTask()
{
    await MyAwaitableMethod();
}
背景信息:整个想法实际上源于C++1z/2x协程方案,该方案基本上具有相同的基本模型,但它允许在定义任何类型时进行更多的控制,这些类型具有嵌入的promise类型,作为co_Wait的结果从协程返回

[编辑]

除了答案中提供的链接外,我在以下链接中还发现了一些更多的信息,似乎确实有一些关于这个话题的热门讨论:

[编辑二]


令人惊讶的是,经过进一步的挖掘,这实际上是C7.0的一个预期功能:

更新:这个问题中提到的2017年的功能实际上是在C7.0中实现的;有关详细信息,请参阅

2017年的原始答复如下:

您想要的功能不存在。它已经被提出,我相信有一个原型实现。看

设计说明

如果你感兴趣的话,考虑一下Kotlin的一个通用协同程序的设计工作。这里有好东西


更新:本问题中提到的2017年的功能实际上是在C7.0中实现的;有关详细信息,请参阅

2017年的原始答复如下:

您想要的功能不存在。它已经被提出,我相信有一个原型实现。看

设计说明

如果你感兴趣的话,考虑一下Kotlin的一个通用协同程序的设计工作。这里有好东西


谢谢,这帮助我更好地理解了当前异步/等待功能的范围!我相信它现在已经存在,但它似乎没有很好的文档记录至少,我还没有找到一个好的例子:谢谢,这帮助我更好地理解了当前异步/等待工具的范围!我相信它现在已经存在,但它似乎没有很好的记录至少,我还没有找到一个好的例子: