想知道为什么我们要指定异步方法确实在异步返回类型上返回一个Task对象。使用async关键字指定它似乎是多余的,因为您实际上并没有创建Task对象,所以它很混乱。据我所知,编译器会发出创建Task对象所需的代码(无论是等待调用还是用新任务包装返回)。我真的不喜欢声明类型和返回类型之间的不一致。我有一篇博文详细描述了推理。考虑过推断返回类型,但他们决定不这样做。对于显式返回类型,async关键字更像是一个实现细节。有一个明确的返回类型有两个原因:这不是一个真正的问题:它更像是一个咆哮,因此不是特别适合StackOverflow:我真的不喜欢声明类型和返回类型之间的不一致。如果你想抱怨,开一个博客并抱怨。让我们重新表述一下这个问题:异步方法返回的声明类型可能是,例如,Task,但是方法中return语句返回的表达式必须可以隐式转换为int,而不是Task。这可能令人困惑。什么设计原则证明这种行为是合理的?你是对的,这可能会令人困惑。这很令人困惑,因为异步方法将我们习惯的两件事分开了。这两件事是:在同步方法中,这两件事总是相同的,因为调用者中的恢复点是同步方法的延续。但是异步方法的全部意义在于调用者中的代码不是该方法的延续。通过设置与其关联的任务的继续来控制方法的继续。这就是声明的返回类型和返回语句的类型不同的原因。调用者想要一个Task,但该方法的延续需要一个int。return语句的意思是“这个方法完成了;不管这个方法是同步的还是异步的,都把这个值赋给我的延续”。听起来您在问为什么publicasyncintMyMethodAsync()不会自动编译为实际返回Task。答案是最小意外原则:方法签名中声明的返回类型始终是实际返回类型。这样,当您阅读方法声明时,您总是知道调用该方法时看到的实际返回类型,而无需查看修饰符和记住特殊规则。以上就是C#学习教程:关于异步返回类型分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
