【发布时间】:2013-07-13 18:11:43
【问题描述】:
来自here :
异步方法可以返回
Task<T>、Task或void。 为什么返回Task<T>或Task?因为它们是可等待的,而 void 是 不是。因此,如果您有一个返回Task<T>或Task的异步方法,那么 您可以将结果传递给 await。
现在考虑这个例子:
/*1*/ public async Task<int> CalculateAnswer()
/*2*/ {
/*3*/ await Task.Delay(100);
/*4*/
/*5*/ // Return a type of "int", not "Task<int>"
/*6*/ return 42;
/*7*/ }
我明白当控件进入async方法并遇到await操作符的那一刻,它首先检查awaitable是否已经完成,如果已经完成则正常运行(同步)。 如果没有,则从 async 方法返回。
好的,所以它返回了,我们需要密切关注异步任务。我想这就是为什么我们在方法签名处有Task<T>。
问题
但是为什么我在 Task<int> 中需要 int ? awaitable 与 INT 没有任何关系(!)!——它可能是一个下载某些东西的网络服务。为了密切关注异步操作,我只能使用Task。
所以 要么 Task<t> 是用来监视 async 操作 OR(!!!) 是用来指示返回值方法?
我很困惑。 :-(
【问题讨论】:
标签: .net-4.5 async-await c#-5.0