web-dev-qa-db-ja.com

C#タスクは実際にいつ開始されますか?

タスクは実際にいつ開始されますか?

_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);で待機するように言ったときに開始されますか?

27
GTHvidsten

asyncメソッドを呼び出すと、hotタスク(すでに開始されているタスク)が返されます。したがって、強制的に実行するために必要な実際のコードはありません。

MSDNによれば( Stephen Clearyに感謝 )タスクベースの非同期パターン(TAP)パターン 返されたタスクはホットである必要があります 。つまり、new Taskで作成されたタスクを除くすべてのタスクがホットになります。

参照記事から:

Public Taskコンストラクターによって作成されたタスクは、コールドタスクと呼ばれます...他のすべてのタスクは、ライフサイクルをホット状態で開始します。

33
Patrick Hofman