gpt4 book ai didi

c# - 是否可以让 C# 异步方法返回类型不是 Task 或 void?

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:56 27 4
gpt4 key购买 nike

似乎任何实现了GetAwaiter的对象可以等待要求,Task<>类型只是满足此要求的众多可能类型之一。但是,似乎 async方法只能返回 Task<>void据我所知。是否可以将我的自定义任务与可等待类型 Hook ,因此我可以将我的自定义可等待类型指定为异步返回类型,然后我当然可以随后链接 await正常调用链。类似于:(伪代码)

async MyAwaitable MyAwaitableMethod()
{
await myAwaitable;
}

async Task MyTask()
{
await MyAwaitableMethod();
}

背景信息:整个想法实际上源于 C++1z/2x 协程提案,它具有基本相同的基本模型,但它允许更多地控制定义具有嵌入式的任何类型promise_type从协程返回(作为 co_await 的结果)。

[编辑]

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

  1. https://github.com/dotnet/roslyn/issues/7169
  2. https://github.com/dotnet/roslyn/issues/10902
  3. 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/

最佳答案

更新:2017 年这个问题中提到的功能实际上是在 C# 7.0 中实现的;见https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/async-return-types了解详情。

2017 年的原始答案如下:


您需要的功能不存在。它已经被提出,我相信有一个原型(prototype)实现。见

https://github.com/dotnet/roslyn/issues/16476

用于设计笔记。

如果您对这个主题感兴趣,还可以考虑研究 Kotlin 中通用协程功能的设计工作。这里有好东西。

https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md

关于c# - 是否可以让 C# 异步方法返回类型不是 Task<T> 或 void?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41732886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com