簡體   English   中英

是否有可能讓 C# 異步方法返回類型不是任務<T>還是無效?

[英]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 )。

[編輯]

除了答案中提供的鏈接之外,我還在以下鏈接中找到了更多信息,似乎確實有一些關於此主題的熱門討論:

  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

[編輯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM