非同期操作または長時間にわたる同期操作に対する連携によるキャンセルのために、統一されたモデルが使用されます。トークンと呼ばれる軽量のオブジェクトに基づいています。以上のキャンセル可能な操作を呼び出すオブジェクトは、各操作にトークンを渡します。個々の操作は他の操作にトークンのコピーを渡すことができます。その後、トークンを作成したオブジェクトは、操作が実行している処理を停止するように、そのトークンを使用してその操作に要求できます。キャンセル要求は、要求側のオブジェクトからのみ発行できます。各リスナーは要求を確認し、適切な時に定期的にその要求に応答する必要があります。manner.連携によるキャンセル処理モデルを実装するための一般的なパターンは次のとおりです。オブジェクトのインスタンスを作成します。トークンへのキャンセル通知を管理し、送信します。プロパティによって返されるトークンを、キャンセルをリッスンしているそれぞれのタスクまたはスレッドに渡します。cancellation.それぞれのタスクまたはスレッドに対し、キャンセルに応答するメカニズムを提供します。メソッドを呼び出します。インターフェイスを実装します。リソースを解放する必要があります。holds.トークンのソースとそのトークンのすべてのコピーの間の関係を次の図に示します。モデルによって、キャンセルに対応したアプリケーションやライブラリの作成が簡単になりました。このモデルでは次の機能がサポートされます。features:キャンセルは連携によって行われ、リスナーに強制されません。リスナー側でキャンセル要求に応じた適切な終了方法を決定できます。request.要求とリッスンが区別して行われます。キャンセル可能な操作を呼び出すオブジェクトの側で制御できます。回のメソッド呼び出しでトークンのすべてのコピーにキャンセル要求を発行できます。トークンに結合して同時にリッスンできます。コードで確認して応答したりすることができます。code.リスナーはポーリング、コールバックの登録、または待機ハンドルの待機により、キャンセル要求の通知を受け取ることができます。フレームワークは、関連する一連の型として実装されます。それらの型を次の表に示します。トークンを作成するオブジェクトです。そのトークンのすべてのコピーに対するキャンセル要求の発行も、このオブジェクトで行います。パラメーターとして渡されます。プロパティの値を監視します。パラメーターとして受け入れます。リスナーは必要に応じてこの例外をスローすることができます。この例外により、キャンセルのソースを確認し、キャンセル要求にそのリスナーが応答したことを他のリスナーに通知します。いくつかの型に統合されています。モデルを使用することをお勧めします。プロパティをキャンセル可能な操作に渡します。プロパティの値を監視します。なったら、リスナーは適切な方法で終了できます。この例では、メソッドの終了だけを行っています。多くの場合はこの処理だけで十分です。メソッドを使用しています。型を使用する例については、「方法:タスクとその子を取り消す」を参照してください。フレームワークでは、キャンセルとは、オブジェクトのキャンセルではなく操作のキャンセルのことを指します。キャンセル要求とは、必要なクリーンアップの実行後にできるだけ早く操作を停止するようにという要求です。参照している必要がありますが、その操作がプログラムに実装されている場合があります。再設定することはできません。トークンを再利用することはできません。メソッドを呼び出すことにより、操作のキャンセル機構に基づいて実装できます。callbackキャンセル可能な複数の操作の同時処理がオブジェクトでサポートされている場合は、キャンセル可能な各操作への入力として別々のトークンを渡します。つの操作を取り消すことができます。デリゲート内で、キャンセル要求に応じた操作の終了方法を決定します。デリゲートでは、必要なクリーンアップのみ実行してから、できるだけ早く制御を戻すことができます。コードに通知する必要がある場合があります。メソッドを呼び出すことです。デリゲートのスレッドでこの例外をキャッチし、例外のトークンを調べて、この例外が連携によるキャンセルを示すのか、それ以外の例外的な状況を示すのかを判断できます。詳細については、「タスクのキャンセル」をご覧ください。プロパティの値を定期的にポーリングすることによってキャンセル要求をリッスンできます。場合、メソッドはできるだけ早くクリーンアップを行って終了する必要があります。最適なポーリング間隔はアプリケーションの種類によって異なります。プログラムごとに、最適なポーリング間隔を開発者が決定します。ポーリング自体がパフォーマンスに大きく影響することはありません。つの例を次に示します。Subより完全なコード例については、「方法:ポーリングによりキャンセル要求を待機する」を参照してください。トークンの値を定期的に確認できないことによりブロックされる場合があります。メソッドを登録できます。オブジェクトを返します。要求を取り消す方法を次の例に示します。オブジェクトは、スレッドの同期を管理し、適切な時点でコールバックの実行を中止できるようにします。time.システムの応答性を確保し、デッドロックを回避するには、コールバックの登録時に次のガイドラインに従ってください。呼び出しは戻りません。メソッドは高速に動作する必要があります。呼び出し、そのコールバックが待機しているロックを保持する場合は、プログラムのデッドロックが発生する可能性があります。戻った後に、コールバックで使用されていたすべてのリソースを解放してください。使用したりしないでください。コンストラクターを使用します。あることを指定できます。コールバックで手動によるスレッド処理を実行すると、デッドロックが発生する可能性があります。deadlock.より完全なコード例については、「方法:キャンセル要求のコールバックを登録する」を参照してください。プロパティを使用してその操作がイベントとキャンセル要求の両方を待機するようにできます。トークンの待機ハンドルは、キャンセル要求への応答としてシグナル状態になります。トークンがシグナル状態であったかどうかを判断できます。フレームワークをサポートしています。work.Console.Write("Working...")Thread.SpinWait(500000)より完全なコード例については、「方法:待機ハンドルがあるキャンセル要求を待機する」を参照してください。トークンを同時にリッスンしなければならない場合もあります。トークンも監視する必要がある場合などです。