2011-08-01から1ヶ月間の記事一覧
ここまで15回に渡ってTPLについて見てきました。個人的に勉強したことの備忘録でしかありませんが、読まれた方々が少しでもTPLについて興味を持ってくださったり、理解を深めるキッカケになっていれば幸いです。 しばらくTPLに触れてきて実感したことは、非…
GUIアプリケーションを作成していると、非同期処理の前後や実行中にボタンなどのUIコンポーネントを制御したいと思うことは多々あると思います。しかし、Windows Forms、WPFなどでは、UIスレッド以外のスレッドから直接UIコンポーネントを操作することは認め…
タスクは、生成の開始からタスクスケジューラーへの登録、タスクの実行、完了など、自身のライフサイクルが現在どのような状態にあるかを事細かに把握しています。また、タスクインスタンス毎に割り当てられる一意のIDも保持しています。今回は、これらタス…
今回はタスクをキャンセルする方法について見ていきます。以前ループの取り消しでも触れましたが、.NET Framework 4ではキャンセルトークンを用いた統一的なキャンセル手法が提供されています。そして、タスクもそれを使ってキャンセルできるようにサポート…
プログラムを作成するにあたっては、発生し得る例外というものを十分に考慮しなければなりません。しかしながら、非同期処理/並列処理の場合は例外処理がやりにくいのも実情です。特にタスクは呼び出し元スレッドとは非同期に実行されるので、その中で発生し…
タスク内で別のタスクを作成/実行するという、入れ子のタスクを作ることができます。また、タスクに親子関係を持たせることも可能です。今回はこれらについて見ていきたいと思います。 入れ子タスク 入れ子タスクを作るのに何か特別な作業が必要かというと、…
あるタスクが完了したあと、連続して別のタスクを実行したい場合があります。このとき、まず思い付くのは「最初に実行したタスクAを待機して、それから別のタスクBを開始する」でしょう。しかし、これでは結局呼び出し元スレッドをブロックすることになり、…
アプリケーションによっては、呼び出し元スレッドでタスクが完了するのを待ち合わせなければならないケースがあります。また、実行していたタスクから結果を受け取り、それに応じて処理を分けたい場合もあります。言うまでもなく、TPLにはこのようなニーズに…
前回まではデータの並列化 (= コレクションの各要素の並列処理) について見てきましたが、今回からはタスクの並列化 (= 他の処理とは独立に実行可能な作業の並列処理) について見ていきます。 タスクの概要 これまで、非同期処理/並列処理を行う際にはThread…
今回は並列処理のループの取り消しの方法について見ていきます。 通常のfor/foreach文のようなループ処理にユーザーによる任意タイミングでのキャンセルを行いたい場合があるように、並列ループにもそのようなニーズがあることは自明なことと思います。.NET …