该任务表示由返回Task的异步方法返回的内容是什么?

时间:2012-08-13 15:47:03

标签: c# async-await

如果使用async声明的异步方法的返回类型为Task或Task< TResult>可以等待。在方法内部,在C#代码中没有返回任务,但是在Task< TResult>的情况下。 TResult的价值。例如:

private static async Task<int> AsyncDemo()
{
    await Task.Delay(1000);
    return 1;
}

生成的IL代码返回启动已编译状态机的AsyncTaskMethodBuilder的任务。我的问题是这个任务实际代表什么。我认为这是一个代表不是线程的任务,而是状态机的执行。我还假设任务在状态机完成时完成,或者在发生异常时设置为Faulted状态。我很感激澄清。

1 个答案:

答案 0 :(得分:2)

任务在概念上代表了方法。

当方法返回时,任务完成(成功),结果设置为方法返回的值(如果适用)。如果该方法抛出异常,则该任务出现故障(已完成并显示错误)。 OperationCanceledException有一个特例:在这种情况下,任务被取消(已取消完成)。

从技术上讲,任务确实代表状态机,它是对方法的重写。但是由于状态机是隐藏的,因此任务在概念上代表了方法本身。

相关问题