2017-03-29 7 views
9

タスクはいつ実際に開始されますか?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);でそれを待つと言ったときに開始していますか?

+1

これは大きな問題です。初心者のためにここを見てください:http://blog.stephencleary.com/2013/11/there-is-no-thread.html –

+1

あなたはすでに研究をしましたか? – PJvG

+1

@PJvGはい、もちろんです。満足できる答えが見つかりませんでした。 – GTHvidsten

答えて

10

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

MSDN(thanks to Stephen Cleary)によると、タスクベースの非同期パターン(TAP)パターンrequires returned tasks to be hotによると、これは、new Taskで作成されたタスクを除くすべてのタスクが熱くなることを意味します。

参照記事から:

公共Taskコンストラクタによって作成されたタスクは、タスクとして風邪と呼ばれている...他のすべてのタスクが熱い状態でそのライフサイクルを開始します。

+0

違いを知ってうれしい – Charlesliam

+1

"非同期のないタスクを返すメソッドを呼び出すと、タスクは開始されません。"私にはちょっと混乱しています。非同期でタスクを返すメソッドの大部分は、メソッド自体の内部でタスクを開始するため、まだ開始されているタスクを返します。 – Evk

+0

@Evk '自動的に'>良いですか? –

関連する問題