来自here :
异步方法可以返回Task <T>,Task或void . 为什么要返回Task <T>或Task?因为它们是等待的,而虚空则不是 . 因此,如果您有一个异步方法返回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*/ }
我 do understand 当控件进入 async
方法并遇到 await
运算符的那一刻,它首先检查等待是否已经完成,如果有,那么它运行常规(同步) . and if it didn't , it returns from the async method.
好的,它返回,我们需要密切关注异步任务 . 我猜这就是为什么我们在方法签名上有 Task<T>
.
Question
但是为什么我需要 Task<int>
中的 int
? the awaitable has nothing(!) to do with INT !! - 它可能是一个Web服务下载的东西 . 为了密切关注异步操作,我只能使用 Task
.
那么 Either Task<t>
是否有关注 async
操作 OR(!!!) 是否有指示方法的返回值?
我糊涂了 . :-(
1 回答
此示例中有两个任务 .
CalculateAnswer
返回的任务是Task<int>
. 它代表方法CalculateAnswer
. 当CalculateAnswer
完成时,该任务将完成,其结果(int
)将是该方法的返回值 .另一个任务是
Task.Delay
返回的任务 . 那只是一个Task
;没有结果 Value . 这项任务代表了延迟 .