首页 文章

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

提问于
浏览
0

来自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> 中的 intthe awaitable has nothing(!) to do with INT !! - 它可能是一个Web服务下载的东西 . 为了密切关注异步操作,我只能使用 Task .

那么 Either Task<t> 是否有关注 async 操作 OR(!!!) 是否有指示方法的返回值?

我糊涂了 . :-(

1 回答

  • 4

    此示例中有两个任务 .

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

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

相关问题