采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
为什么await放在了longRunningTask之前而不是产生它的函数LongRunningOperationAsync之前?
问题非常好!
请对比下面代码你就明白了:
Task<int> longRunningTask = LongRunningOpAsync(); int result = await longRunningTask;
int result = await LongRunningOpAsync();
以上两句话是等效的,第一个方式是让longRuningOpAsync等于一个异步操作(此时类型为Task<T>),然后再await执行异步操作,输出int类型数据result;而第二种方式是直接await异步执行LongRunningOpAsync,直接输出int类型数据result。
我这么说能讲清楚了吗?
那请问老师这样写可以吗? Task<int> longRunningTask = await LongRunningOpAsync(); int result = longRunningTask;
我之前把Task<int>类型错误理解为执行函数的返回结果了,所以追问了一下那种写法是否可以。请问老师下面的理解是否正确? Task<int>是异步执行的操作,而不是执行的结果,当使用await后才真正异步执行得到结果。因此无论是先映射到Task<int>上再异步执行还是直接异步执行都是一样的。
没错,就是这样。所以,Task<int> longRunningTask = await LongRunningOpAsync(); 这样的写法是错误的。
登录后可查看更多问答,登录/注册
. Net Core实战+RESTful思想纵深课程,开发优雅RESTful风格API。
398 2
469 2
573 1
1.0k 2
1.3k 3