请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

await放置的位置问题

为什么await放在了longRunningTask之前而不是产生它的函数LongRunningOperationAsync之前?

正在回答

1回答

问题非常好!

请对比下面代码你就明白了:

  1. Task<int> longRunningTask = LongRunningOpAsync();
    int result = await longRunningTask;
  2. int result = await LongRunningOpAsync();


以上两句话是等效的,第一个方式是让longRuningOpAsync等于一个异步操作(此时类型为Task<T>),然后再await执行异步操作,输出int类型数据result;而第二种方式是直接await异步执行LongRunningOpAsync,直接输出int类型数据result。


我这么说能讲清楚了吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 Sea_Man #1
    那请问老师这样写可以吗?
    Task<int> longRunningTask = await LongRunningOpAsync();
    int result = longRunningTask;
    回复 有任何疑惑可以回复我~ 2020-07-21 15:17:34
  • 提问者 Sea_Man #2
    我之前把Task<int>类型错误理解为执行函数的返回结果了,所以追问了一下那种写法是否可以。请问老师下面的理解是否正确?
    
    Task<int>是异步执行的操作,而不是执行的结果,当使用await后才真正异步执行得到结果。因此无论是先映射到Task<int>上再异步执行还是直接异步执行都是一样的。
    回复 有任何疑惑可以回复我~ 2020-07-21 15:29:24
  • 阿莱克斯刘 回复 提问者 Sea_Man #3
    没错,就是这样。所以,Task<int> longRunningTask = await LongRunningOpAsync(); 这样的写法是错误的。
    回复 有任何疑惑可以回复我~ 2020-07-21 16:21:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信