BT

Task Parallelライブラリの新しいキャンセルフレームワークのご紹介

| 作者: Jonathan Allen フォローする 595 人のフォロワー , 翻訳者 尾崎 義尚 フォローする 0 人のフォロワー 投稿日 2009年11月22日. 推定読書時間: 2 分 |

原文(投稿日:2009/11/11)へのリンク

.NETのTask Parallelライブラリは、ベータ2のためにモデルチェンジを行なった。パフォーマンスと機能性の両面を向上させた、老朽化したThreadPoolを置き換えるライブラリになると期待されている。向上のひとつとして、ThreadPoolがタスクをキャンセルすることができないことについて記述されている。ご存じかもしれないが、現状ではタスクがいったん古いプールに置かれると、タスクを中断するいかなる手段も存在していない。

Task Parallelライブラリは、いつでもキャンセルをサポートする予定だったが、ベータ2では、実装や露出に影響する重大な変更が加えられた。新しいモデルの表の顔はCancellationTokenを内包するCancellationTokenSourceだ。これは、タスクメンバーのCancel、AcknowledgeCancellation、IsCancellationRequested、Current、Parent、列挙型のTaskCreationOptions.RespectParentCancellationの必要性を取り除く。これにより、多くのメソッドが任意のCancellationTokenを渡すことができる。

オブジェクトは、ひとつ以上のタスクをキャンセルするためにCancellationTokenSourceの参照を保持する必要がある。キャンセル処理に応じる必要があるタスクは、CancellationTokenへの参照のを得て、定期的に自身のIsCancellationRequestedプロパティをチェックする。それが適切な場合、複数のタスクが同じCancellationTokenを共有することができる。キャンセルの要求を受け入れるために、各タスクはOperationCanceledExceptionをスローする必要がある。

以前のベータでは、タスクは親子関係を理解していた。それらの関係とそれらの関連した行動は、開発者抜きで自動的に確立されていた。ベータ2では、その決定は覆された。親子関係は、開発者がそれを求めるときだけ確立され、それ意外では、各タスクは自律していると考えられている。

もし、親子タスクを選択した場合、例外の伝搬や子タスクが完了するまで、親タスクが明示的に待つなどの機能が必要になる。もし、そうしないのであれば、タスクは、ThreadPoolのすばらしい代替になるだろう。

ほとんどの未処理例外と同じようにTPL例外が無視されるとアプリケーションはクラッシュします。例外を監視するためにタスクがガベージコレクトされる前にタスクのWaitを呼ぶか、例外プロパティをチェックする必要がある。ベータ2には、もう一つのオプション、UnobservedTaskExceptionイベントが追加されている。これは、ダメージを与える直前に開発者に対して最後のチャンスを与える。

ベータ2の変更についてさらに知りたい場合は、Parallel Programming with .NET blogをご覧いただきたい。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT