問題タブ [cancellation-token]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Task.Wait() なしで cancelToken を使用する
長時間実行されるwinforms app
タスクと 2 つのボタンがあります。ワンボタンスタートとワンストップ。
開始ボタンを押すと、キャンセルトークンを持つ新しいタスクが開始されます。Stop ボタンを押すと、キャンセル トークンの Cancel メソッドが呼び出されます。
UI を常に使用できるようにしたいので、このジョブの try と catch ブロックをどこに配置しますか。私が見たすべての例で、t.Wait(); の周りに配置しました。
しかし、それを行うとUIがフリーズします。それが、最初にタスクを使用した理由であり、タスクを実行しながらUIを使用し続けます。では、Task.Wait を使用せずに try catch ブロックをどこに置くか。
スタートボタン:
停止ボタン:
c# - CancellationToken が CancellationTokenSource と異なるのはなぜですか?
クラスCancellationToken
に加えて.NET 構造体が導入された理由の根拠を探しています。API の使用方法CancellationTokenSource
は理解していますが、そのように設計されている理由も理解したいと考えています。
つまり、なぜ私たちは持っているのですか:
次のように直接渡す代わりにCancellationTokenSource
:
これは、トークンを渡すよりもキャンセル状態のチェックが頻繁に行われるという事実に基づくパフォーマンスの最適化ですか?
それで、それCancellationTokenSource
は と update を追跡できCancellationTokens
、各トークンのキャンセルチェックはローカルフィールドアクセスですか?
どちらの場合も、ロックのない volatile bool で十分であることを考えると、なぜそれが高速になるのかはまだわかりません。
ありがとう!
f# - F# Async.RunSynchronously タイムアウトと cancelToken を使用
タイムアウトと CancellationToken を指定して Async.RunSynchronously を呼び出すと、タイムアウト値が無視されるようです。CancellationToken で CancelAfter を呼び出すことでこれを回避できますが、理想的には、ワークフローで発生する例外、TimeOutExceptions と OperationCanceledExceptions を区別できるようにしたいと考えています。
以下のサンプルコードがこれを示していると思います。
次の出力は、タイムアウトが最初のケース (CancelationToken が指定されていない場合) でのみ有効であることを示しています。
これは意図した動作ですか?私が求めている動作を取得する方法はありますか?
ありがとう!
c# - CancellationToken プロパティの使用方法
クラス RulyCancelerの前のコードと比較して、私は CancellationTokenSource
.
Cancellation Tokensに記載されているように、つまり、例外をスロー/キャッチせずに使用するにはどうすればよいですか? 物件を利用できIsCancellationRequested
ますか?
私はこのようにそれを使用しようとしました:
と
cancelToken.ThrowIfCancellationRequested();
しかし、これによりメソッドで実行時エラーが発生しましたWork(CancellationToken cancelToken)
:
私が正常に実行したコードは、新しいスレッドで OperationCanceledException をキャッチしました。
c# - CancellationToken を非同期メソッドの Task に関連付ける
質問: をメソッドから返されたCancellationToken
に関連付ける方法はありますか?Task
async
一般に、がのと一致するでスローされると、 はTask
のCanceled
状態になります。それらが一致しない場合、タスクは次の状態になります。OperationCancelledException
CancellationToken
Task
CancellationToken
Faulted
async
/では、メソッドのawait
を設定する方法が見つかりませんでした(したがって、同じ種類の機能を実現します)。私のテストから、メソッドが Canceled 状態になる原因となるようです。Task
CancellationToken
OperationCancelledException
async
async
メソッドから呼び出したメソッドがキャンセルされた場合 (およびキャンセルを予期していない場合、つまり this ではない場合)、タスクが状態に入ることが予想されるため、もう少し制御できるとよいでしょうTask
。-州ではありません。CancellationToken
Faulted
Canceled
c# - TaskCancellationTokenを取得する
タスクアクションの実行中CancellationToken
にコンストラクターに渡されたものを取得できますか?Task
ほとんどのサンプルは次のようになります。
しかし、私のアクションがラムダではなく、他のクラスに配置されたメソッドであり、直接アクセスできない場合はどうなりtoken
ますか?token
状態として渡すことが唯一の方法ですか?
c# - CancellationToken引数を指定したCopyTo
議論CopyToAsync
があるようです。しかし、私のコードはすでにバックグラウンドスレッドで実行されているので、CancellationToken
必要ありません。bufferSizeのバイト数をコピーするたびにそれを取得してチェックするオーバーロードが必要CopyToAsync
です。組み込みの実装はありますか?CopyTo
CancellationToken
c# - parallel.foreach - loopState.Stop() とキャンセル
Cancellation 操作と loopState 操作 (Break/Stop) の違いは何ですか?
ParallelOptions Cancellation 操作と ParallelOptions 操作を使用する理由、またはその逆を使用する必要があるのはなぜloopState.Break();
ですかloopState.Stop();
?
c# - キャンセルトークンの停止はどのように続行しますか?
私はこのコードでスレッドを持っています:
return
の代わりにを使用していることに注意してください。break
スレッドを停止すると、 をsome operation 2
実行してはならないからです。
また、このように .ContinueWith が実行されていないことにも気付きました。
まあ、それは単なる「リターン」機能です。tokenSource.Cancel()
C#は、通常の戻りではなく、戻りが原因で戻っていることをどのように知ることができますか?
asp.net-web-api - Web API: CancellationToken を使用した DelegatingHandler
典型的な Web API DelegatingHandler の実装は次のようになります...
CancellationToken.IsCancellationRequested == trueを処理するための推奨される方法は何ですか?
するべきか:
- エラー応答を生成し、デリゲート チェーンを中断しますか?
- (上記のように) 何もしませんか?
- オプション「C」?