16.3 タスク
本章の前半では、Taskクラスを使用して何かしらの作業をスレッドプール上で実行する方法を説明をしました。Taskクラスは単なるスレッドプールのラッパーというわけではありません。Taskクラスやタスク並列ライブラリ(TPL:Task Parallel Library)の関連する型を使用すると、さまざまなシナリオに対応できます。C#の非同期言語機能(「17章 非同期言語機能」のトピック)はタスクオブジェクトを直接扱えるので、タスクは特に重要です。.NETクラスライブラリの非常に多くのAPIがタスクベースの操作をサポートしています。
タスクはスレッドプールを使うための望ましい方法ですが、その用途はマルチスレッド処理に限られません。それよりももっと柔軟な抽象化が行われています。
16.3.1 TaskクラスとTask<T>クラス
TPLの中核には、TaskとTaskクラスから派生しているTask<T>という2つのクラスがあります。Task基底クラスは、完了までにある程度の時間がかかる処理を表します。Task<T>はTaskクラスを拡張し、完了時にはその結果が(T型として)得られる処理を表します(非ジェネリック版のTaskは結果を全く返しません。これは非同期でのvoid型の返り値に相当します)。なお、必ずしもこれらがスレッドと結び付くわけではない点に注意してください。
多くのI/O操作は完了するまでに時間がかかるため、ほとんどの場合、.NETクラスライブラリにはI/O操作用のタスクベースのAPIがあります。例16-15では非同期メソッドを使用して、Webページのコンテンツを文字列として取得しています。この処理では即座に文字列を結果として返せるわけではないので(ページのダウンロードにしばらく時間がかかるので)、代わりにタスクを返します。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access