C#任务什么时候开始?

时间:2017-03-29 09:19:34

标签: c# asynchronous async-await task

任务什么时候开始?

public void DoSomething() {
    Task myTask = DoSomethingAsync();

    Task.WaitAll(new[] { myTask }, 2000);
}

public async Task DoSomethingAsync() {
    await SomethingElse();
}

Task myTask = DoSomethingAsync();初始化时是否会立即启动,或者当您在Task.WaitAll(new[] { myTask }, 2000);中等待它时它是否会启动?

1 个答案:

答案 0 :(得分:29)

调用async方法会返回 hot 任务,这是一项已经启动的任务。所以没有必要强制它运行的实际代码。

根据MSDN(thanks to Stephen Cleary)基于任务的异步模式(TAP)模式requires returned tasks to be hot。这意味着除了使用new Task创建的任务外,所有任务都将很热。

参考文章:

  

由公共Task构造函数创建的任务称为冷任务...所有其他任务在热状态下开始其生命周期。