2013-03-01 12 views
5

Wellでも.Net 4には、新しいタスク機能があります。Async/Await.Net 4.5で非同期で実行したいと思っています。私は別のThreadを使用しなければならない場合があります。特に、Task.RunはThreadPoolを使用してメソッドを非同期に実行しています。Tasksと.NETのスレッド4.5

結論:と一緒にAsync/Awaitの組み合わせを使用しているとThreadsを無料で使えますか?

+0

これはあなたの行っていることに完全に依存します。 – SLaks

+0

@SLaksだから、あなたが私の仕事をするために新しいスレッドをいつトリガするべきか、ThreadPool(Task.Runはどれですか)が十分なのかを教えてください。 –

答えて

5

​​オプションを指定した場合(継続にも同等の機能があります)、タスクはスレッドプールスレッドを使用しません。通常はThreadが使用されます。技術的にはこれは実装の詳細であり、仕様には含まれていませんが、それに頼るのは完全に不合理な仮定ではありません。

Taskを使用すると、Threadで直接行うことができるはずです。

誰かがThreadを直接使用したいと思うかもしれない主なケースは、TPLの上にビルドしないことを前提に、あなた自身の並列ライブラリを作成することです。独自のライブラリを作成するときは、ビジネスアプリケーションのコンテキストでは重要ではありませんが、特定のThreadオブジェクトの基本的な詳細にアクセスする必要があります。または、Tasksを使用してオーバーヘッドを小さくしたい場合があります。

まだ.NET 4.0を使用していない場合は、Taskを使用するオプションはありません。

+0

私は.NET 4.5を使用しています。また、私はライブラリを作成するつもりはありません。私の仕事はすべて、私のコードをすべてエレガントに仕上げる最も簡単で最も強力な方法です。だから私は何をあなたがタスクを使用してスレッドを使用して行われて何をすることができることを言っていると結論することができますか?また、Async/Awaitと組み合わせてタスクを使用するだけで、すべての非同期作業を完了させることも可能です。そして、あなたにはすぐに詳細な答えをありがとう。 –

+0

+1スレッドで通常使用するタスクにLongRunningオプションを使用することをお勧めします。これにより、非同期/待機を容易に取得できます。 ThreadPoolスレッドを使用しない他の方法もあります。しかし、彼らは実際にあなたが非同期/待っていることを今ではあまり買っていません。 –

+0

@PeterRitchie:しかし、私の知識が非同期であることを確認するには、メソッドが待ち受けるように設計されています。現在待っている仕事はちょうど終わっているか、それともAsync/Awaitの別の使い方がありますか? –

関連する問題