0

如果使用 async 声明的异步方法具有 Task 或 Task<TResult> 的返回类型,则可以等待它。在该方法内部,C# 代码中不会返回任何任务,但如果是 Task<TResult>,则返回 TResult 的值。例如:

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

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

4

1 回答 1

2

任务在概念上代表方法。

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

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

于 2012-08-13T16:10:09.387 回答