gpt4 book ai didi

c# - 关于异步返回类型

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

想知道为什么我们应该指定 async 方法返回 Task 对象。

async 关键字指定它似乎是多余的,而且它很困惑,因为您并没有真正创建 Task 对象。

据我所知,编译器确实会发出创建 Task 对象所需的代码(无论是在 await 调用中还是用新 Task 包装返回。)。

我不太喜欢声明类型和返回类型之间的不一致。

最佳答案

这不是一个真正的问题:它更像是一个咆哮,因此不是特别适合 StackOverflow:

I don't really like the inconsistency between the declare type and the return type.

如果你想提示,开一个博客然后提示。让我们将其重新表述为一个问题:

The declared type returned by an async method might be, say Task<int> but the expression returned by a return statement in that method must be implicitly convertible to int, not Task<int>. This is potentially confusing. What design principle justifies this behaviour?

你是对的,这可能会造成混淆。这很困惑,因为 async方法将我们习惯于认为是一回事的两件事分开。这两件事是:

  • 在此方法的调用者中恢复控制时返回什么类型的对象?
  • 什么类型的对象从方法传递到它的continuation?请记住,方法的延续方法完成时运行的代码

在同步方法中,这两件事总是相同的,因为调用方的恢复点同步方法的延续。但异步方法的全部要点在于,调用方中的代码不是该方法的延续。该方法的继续是通过设置与之关联的任务的继续来控制的。

这就是为什么声明的返回类型和赋予 return 的类型的原因说法不同。来电者想要一个 Task<int>但是该方法的继续需要一个int . return语句意味着“此方法已完成;将此值赋予我的继续”,而不管该方法是同步的还是异步的。

关于c# - 关于异步返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816304/

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