C#5异步返回类型-clarification?

时间:2013-07-13 18:11:43

标签: .net-4.5 async-await c#-5.0

来自here :

  

异步方法可以返回Task<T>Taskvoid。   为什么要返回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操作或(!!!)是否有指示方法的返回值?

我很困惑。 : - (

1 个答案:

答案 0 :(得分:4)

此示例中有两个任务。

CalculateAnswer返回的任务是Task<int>。它代表方法CalculateAnswer。当CalculateAnswer完成时,该任务将完成,其结果(int)将是该方法的返回值。

另一项任务是Task.Delay返回的任务。那只是Task;没有结果价值。这项任务代表了延迟。