.NET 4には、キャンセルに対応したアプリケーションやライブラリの構築を支援する新しい型が含まれる予定である。CancellationToken、CancellationTokenSource、そしてキャンセル例外という新しい型は、協調的なキャンセルフレームワークを提供する。
新しい型でサポートできるように設計された発端の原則を以下に記す。
- どんな作業単位が開始したとしても、それにはキャンセル要求に応じた早期終了をサポートする一貫した手段がなければならない。
- 他のさまざまな可動部分を制御するような作業単位は、キャンセル要求を簡単に連鎖させることができなければならない。
- ブロッキング呼び出しは、キャンセルをサポートできなければならない。
- PLINQ列挙子におけるMoveNext()のような複合操作の呼び出しは、単純だが包括的なキャンセルのサポートをしなければならない。
- インフラが長時間にわたる可能性のあるユーザコードへコールバックするときは、ユーザコードは協調的な方法でキャンセル要求を監視して反応することが可能でなければならない。
- キャンセルは、きれいで一貫したセマンティックスを持ったAPIの一部として明記されていなければならない。
- キャンセルの実行は強制的なものではなく協調的でなければならない。
このフレームワークは、2つの新しい型の上に構築されている。
- CancellationToken ‘キャンセルされる可能性がある要求’を表す構造体。この構造体は、メソッドにポーリングさせたり、キャンセル要求を受け取った時に起動するコールバックを登録させたりするための引数として用いられる。
- CancellationTokenSource キャンセル要求を開始するメカニズムを提供するクラス。また、関係するトークンに対する関連も提供する。この設計によって、キャンセルにおける2つの主要な操作を分離できる。1つはキャンセル要求の開始であり、もう1つはキャンセルの監視と対応である。具体的には、CancellationTokenだけを受け入れるメソッドは、キャンセル要求を監視することはできるが、キャンセル要求を開始することはできない。
これらの.NET 4の新しいキャンセル型は、堅牢で一貫したキャンセルの振る舞いを持ったシステムを構築するためのフレームワークを提供する。このフレームワークで、特に長期にわたる作業やブロッキング作業を扱うGUIやアプリケーションやライブラリを支援できるだろう。長期的には、現在提供されているサードパーティー製のキャンセルソリューション間の差異や矛盾点を減らすことが目標である。これらの新しい型は、Parallel Extensionsと相互運用する均一な契約も提供する。