来自here :
异步方法可以返回
Task<T>
,Task
或void
。 为什么要返回Task<T>
或Task
?因为他们是等待的,而且是无效的 不。因此,如果您有一个返回Task<T>
或Task
的异步方法,那么 你可以将结果传递给等待。
现在考虑这个例子:
/*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
运算符时,它首先检查等待是否已完成,如果有然后它运行常规(同步)。 如果没有,则从async
方法返回。
好的,所以它返回,我们需要密切关注异步任务。我猜这就是为什么我们在方法签名上有Task<T>
。
问题
但为什么我需要int
中的Task<int>
? 等待没有什么(!)与INT !! - 它可能是一个webservice下载的东西。为了密切关注异步操作,我只能使用Task
。
所以要么 Task<t>
是为了关注async
操作或(!!!)是否有指示方法的返回值?
我很困惑。 : - (
答案 0 :(得分:4)
此示例中有两个任务。
CalculateAnswer
返回的任务是Task<int>
。它代表方法CalculateAnswer
。当CalculateAnswer
完成时,该任务将完成,其结果(int
)将是该方法的返回值。
另一项任务是Task.Delay
返回的任务。那只是Task
;没有结果价值。这项任务代表了延迟。