タグ付けされた質問 「cancellation-token」

4
タスクコンストラクターのキャンセルトークン:なぜですか?
特定のSystem.Threading.Tasks.TaskコンストラクターCancellationTokenはパラメーターとしてを受け取ります。 CancellationTokenSource source = new CancellationTokenSource(); Task t = new Task (/* method */, source.Token); これについて私を困惑させるのは、メソッド本体の内部から、渡されたトークンを実際に取得する方法がないということです(たとえば、のようなものはありませんTask.CurrentTask.CancellationToken)。トークンは、状態オブジェクトなどの他のメカニズムを通じて提供されるか、ラムダにキャプチャされる必要があります。 それでは、コンストラクタでキャンセルトークンを提供することにはどのような目的がありますか?

5
CancellationTokenがCancellationTokenSourceと分離しているのはなぜですか?
クラスCancellationTokenに加えて.NET 構造体が導入された理由の根拠を探していますCancellationTokenSource。APIの使用方法は理解していますが、そのように設計されている理由も理解したいと思います。 すなわち、なぜ私たちは持っているのですか? var cts = new CancellationTokenSource(); SomeCancellableOperation(cts.Token); ... public void SomeCancellableOperation(CancellationToken token) { ... token.ThrowIfCancellationRequested(); ... } 次のように直接渡す代わりにCancellationTokenSource: var cts = new CancellationTokenSource(); SomeCancellableOperation(cts); ... public void SomeCancellableOperation(CancellationTokenSource cts) { ... cts.ThrowIfCancellationRequested(); ... } これは、トークンを渡すよりもキャンセル状態のチェックが頻繁に行われるという事実に基づくパフォーマンス最適化ですか? それで、CancellationTokenSourceを追跡して更新できCancellationTokens、各トークンのキャンセルチェックはローカルフィールドアクセスですか? どちらの場合も、ロックされていない揮発性のブールで十分であることを考えると、なぜそれが速いのかはまだわかりません。 ありがとう!

6
CancellationTokenのデフォルトパラメータ
追加したい非同期コードがありCancellationTokenます。ただし、これが不要な実装はたくさんあるので、デフォルトのパラメータを使用したいと思いますCancellationToken.None。しかしながら、 Task<x> DoStuff(...., CancellationToken ct = null) 収量 タイプ「System.Threading.CancellationToken」への標準的な変換がないため、タイプ ''の値はデフォルトパラメータとして使用できません そして Task<x> DoStuff(...., CancellationToken ct = CancellationToken.None) 'ct'のデフォルトのパラメーター値はコンパイル時の定数でなければなりません のデフォルト値を設定する方法はありますCancellationTokenか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.