gpt4 book ai didi

c# - 使用泛型作为异步方法的返回类型

转载 作者:可可西里 更新时间:2023-11-01 09:06:17 26 4
gpt4 key购买 nike

之前的一个问题让我想知道为什么下面的方法会引发编译时错误:

The return type of an async method must be void, Task or Task

public async T MyMethodAsync<T>() where T : Task
{
// Irrelevant code here which returns a Task
}

因为我们在编译时知道 T 总是一个 Task或派生类型,为什么这行不通?

编辑

我问的原因是方法可能返回 TaskTask<T> .假设该方法可以返回任何一个,我不想重复代码。

当然这都是理论上的,并不是为了生产目的。

编辑2

找到 Lucian Wischik 的一篇很棒的文章: Why must async return Task

最佳答案

三个问题:

  • 仅仅因为T是“Task 或派生类型”并不意味着它是TaskTask<T> .如果我调用 MyMethodAsync<MyCustomTask>,你会期待什么?其中 MyCustomTask源自 Task ?

  • 编译器需要知道它是否正在构建一个返回 Task 的状态机或 Task<T>当它编译方法时——它在不同的情况下使用不同的辅助类

  • 如果异步方法的返回类型为 Task , 任何 return语句不能指定值;如果它的返回类型为 Task<T>任何return语句必须指定一个可隐式转换为 T 的值.这怎么能在 MyMethodAsync 内工作? ?这有点像说“我的方法是 void 或返回 T - 您可以决定何时调用它”。

不清楚您要在这里实现什么,但基本上这是行不通的。

关于c# - 使用泛型作为异步方法的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939396/

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