为何添加async修饰符后,返回Task<int>的方法可直接返回int?
async修饰符与返回类型匹配的原理
错误代码与编译报错
public Task<int> Handle { var result = <do_something_returning_an_int>(); ... return result; }
编译器报错:
cannot implicitly convert type 'int' to 'System.Threading.Tasks.Task<int>'
修改后可编译的代码
async Task<int> Handle { var result = <do_something_returning_an_int>(); ... return result; }
为什么加了async就能编译?
- 不带
async时,方法声明返回Task<int>,就必须手动返回一个Task<int>实例,直接返回int必然类型不匹配,编译器不会自动帮你做转换。 - 加上
async后,这是C#的语法糖在起作用:编译器会自动处理返回值的包装——当你在async方法里返回int,编译器会把这个值打包成一个已完成状态的Task<int>对象,刚好符合方法的返回类型要求。
纠正你的误解
async不是“表示任务无需等待结果返回”,它的核心是允许方法内部使用await关键字,让方法能以异步方式执行。自动包装返回值是编译器给async方法的配套简化,不用你手动创建和返回Task对象,减少冗余代码。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

