[英]The return type of an async method must be void, Task or Task<T> in C#
[英]Is it possible to have C# async method return type to be something not Task<T> or void?
似乎可以等待實現GetAwaiter
要求的任何對象, Task<>
類型只是滿足此要求的眾多可能類型之一。 但是,據我所知,似乎async
方法只能返回Task<>
或void
。 是否可以像等待類型一樣連接我的自定義任務,所以我可以將我的自定義等待類型指定為異步返回類型,然后當然我可以隨后將await
正常鏈接到調用鏈上。 類似的東西:(偽代碼)
async MyAwaitable MyAwaitableMethod()
{
await myAwaitable;
}
async Task MyTask()
{
await MyAwaitableMethod();
}
背景信息:整個想法實際上源於 C++1z/2x 協程提案,它具有基本相同的基本模型,但它允許在定義任何具有嵌入promise_type
類型時進行更多控制以從協程返回(作為co_await
)。
[編輯]
除了答案中提供的鏈接之外,我還在以下鏈接中找到了更多信息,似乎確實有一些關於此主題的熱門討論:
[編輯2]
令人驚訝的是,經過一些進一步的挖掘,這實際上是 C# 7.0 的一個預期特性: http : //intellitect.com/generalized-async-return-types/
更新:2017 年這個問題中提到的功能實際上是在 C# 7.0 中實現的; 有關詳細信息,請參閱https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/async-return-types 。
2017 年的原始答案如下:
您想要的功能不存在。 它已被提出,我相信有一個原型實現。 看
https://github.com/dotnet/roslyn/issues/16476
對於設計說明。
如果您對這個主題感興趣,還可以考慮研究 Kotlin 中通用協程功能的設計工作。 這里的好東西。
https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.