C# C异步方法的返回类型是否可能不是Task或void?
似乎任何实现GetAwaiter需求的对象都可以等待,任务类型只是满足此需求的许多可能类型之一。然而,据我所知,异步方法似乎只能返回Task或void。是否可以将我的自定义任务与等待类型连接起来,这样我就可以将我的自定义等待类型指定为异步返回类型,然后我当然可以随后正常地将等待链接到调用链上。类似于:伪代码C# C异步方法的返回类型是否可能不是Task或void?,c#,async-await,C#,Async Await,似乎任何实现GetAwaiter需求的对象都可以等待,任务类型只是满足此需求的许多可能类型之一。然而,据我所知,异步方法似乎只能返回Task或void。是否可以将我的自定义任务与等待类型连接起来,这样我就可以将我的自定义等待类型指定为异步返回类型,然后我当然可以随后正常地将等待链接到调用链上。类似于:伪代码 async MyAwaitable MyAwaitableMethod() { await myAwaitable; } async Task MyTask() { awa
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的一个通用协同程序的设计工作。这里有好东西
谢谢,这帮助我更好地理解了当前异步/等待功能的范围!我相信它现在已经存在,但它似乎没有很好的文档记录至少,我还没有找到一个好的例子:谢谢,这帮助我更好地理解了当前异步/等待工具的范围!我相信它现在已经存在,但它似乎没有很好的记录至少,我还没有找到一个好的例子: