他のタスクなどを開始するタスクを開始します。
そのツリーを考えると、いずれかのタスクが失敗すると、操作全体の結果は役に立たなくなります。キャンセルトークンの使用を検討しています。驚いたことに、トークンには「CancelThisToken()」メソッドがありません...
私の質問は次のとおりです:[〜#〜] only [〜#〜]a CancellationToken 、キャンセルしますか?
ドキュメントに記載されているように、ソースオブジェクトからcancelメソッドを呼び出す必要があります。サンプルコードは、指定したリンクに含まれています。関連するセクションは次のとおりです。
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
previouslyProvidedToken = source.Token;
...
source.Cancel();
https://msdn.Microsoft.com/en-us/library/system.threading.cancellationtoken(v = vs.110).aspx
cancellationTokenのみを所有している場合、どうすればキャンセルできますか?
ソースへの参照がないと、トークンをキャンセルできません。これは、最初にトークンを生成したCancellationTokenSourceが必要という意味ではありません。トークンを指定すると、トークンソースの新しいインスタンスを作成して、そのトークンを提供されたトークンに割り当ててキャンセルできます。このトークンを読み取ることができる他のすべての関係者は、キャンセルが要求されたことを確認できます。
これまでに提供された回答の拡張として、メソッドにCancellationToken
インスタンスの両方を提供したい場合、and内部でキャンセルします、 _CancellationTokenSource.CreateLinkedTokenSource
_ を調べる必要があります。本質的に、これはcts.Cancel()
が呼び出されたとき、または提供されたトークンの1つが呼び出されたときにキャンセルされます。
CancellationTokenSourceインスタンスからCancellationTokenインスタンスを生成し、CTSインスタンスでCancelを呼び出します。
例: https://msdn.Microsoft.com/en-us/library/dd321955(v = vs.110).aspx
例外を発生させずにスレッドを正常にキャンセルする方法もあります。IsCancellationRequestedのCTを確認し、自分でケースを処理してください。詳細: IsCancellationRequestedプロパティの使用?