問題タブ [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.

0 投票する
4 に答える
58130 参照

c# - Task.Run のタイムアウトに CancellationToken を使用しても機能しない

わかりました、私の質問は本当に簡単です。このコードがスローしないのはなぜTaskCancelledExceptionですか?

しかし、これは機能します

0 投票する
3 に答える
3310 参照

c# - キャンセル トークンを使用して C# でブロックされたタスクをキャンセルするにはどうすればよいですか?

常にブロックされるタスクがあり、タスクをキャンセルするために使用される CancellationToken が渡されます。ただし、タスクのキャンセル時に実行するように設定されている継続タスクは実行されません。コードは次のとおりです。

後でコードのどこかで...

_stream.StartStream() に Task を使用しなければならなかった理由は、この呼び出しが永久にブロックされるためです (私が制御できない API、_stream は Web サービスからデータをストリーミングするサードパーティの Api を参照することに注意してください)。それは別のスレッドで。

タスクをキャンセルする最良の方法は何ですか?

0 投票する
1 に答える
642 参照

c# - CancellationTokenがキャンセルされたときにコードを実行する方法は?

CancellationToken を指定して、CancellationToken がキャンセルされたときに非同期操作を表すオブジェクトで「キャンセル」メソッドを呼び出したいと考えています。これは可能ですか?

背景: 次の方法で非同期操作を表す API とやり取りしています (多かれ少なかれ):

これをメソッドで簡単にラップできますがTask DoAsyncOp()、キャンセルをサポートしたいと思いTask DoAsyncOp(CancellationToken cancellationToken)ます。私の場合、CancellationToken がキャンセルされたら、AsyncOp オブジェクトで Cancel を呼び出します。

0 投票する
1 に答える
2642 参照

c# - Azure Service Bus Queue クライアントで CancellationToken を使用する方法は?

Azure Service Bus キュー クライアントでは、このReceiveBatchAsyncメソッドを使用して、指定された時間待機し、メッセージのバッチを非同期的に受信します。

アプリケーションを完全にシャットダウンしたいのでCancellationToken、長時間実行されるすべての非同期プロセスに実装していますが、ReceiveBatchAsyncキャンセル可能な過負荷はないようです。

言い換えれば、私はこれをしたいのですが、できません:

CancellationToken直接提供されないこのようなタスクに aを適用する最良の方法は何でしょうか? シャットダウン中に 30 秒も待ちたくありません。

0 投票する
1 に答える
357 参照

c# - Task.RunSynchronously() は CancellationToken を気にしません

現在のスレッドでサードパーティ関数を実行したい (オーバーヘッドを避けるため) が、CancellationTokenを使用していつでも関数を中断できるようにしたい。

それが私がタスクを作成して実行する方法です:

cts.Cancel()(別のスレッドで)呼び出された後、タスクは停止しません

F# でトリックを実行する静的関数を見つけました。

簡単な C# ソリューションがあるはずだと確信しています。助けてもらえますか?

0 投票する
1 に答える
11012 参照

c# - TaskCanceledException をキャッチして Task.Canceled をチェックするのは良い考えですか?

私のチームには、 async を使ったコーディングが大好きな人が何人かいTaskます。また、パラメータを使用したい場合もありCancellationTokenます。

私が確信していないのは、チームとしてこのスタイルのコード (A) を使用する必要があるかどうかです。

これは明らかに、呼び出し元が処理を続行するかどうかを判断するためにキャンセル トークン自体をチェックする必要があり、null retVals を処理する必要がある可能性があることを意味します。

ただし、TaskCanceledException に依存する 2 番目のスタイルのコード (B) を採用すると、次のようになります。

実装コードは間違いなく単純です。呼び出し元は、必要に応じて例外を処理するかどうかを選択できます...しかし、呼び出し元がTaskCanceledException を心配する必要があることを忘れて、プロセスがクラッシュする可能性があることを心配せずにはいられません。これらの例外を (フォアグラウンドまたはバックグラウンド スレッドで) キャッチしないためです。

ですから、私の過度に楽観的な言い回しの質問は次のとおりです。誰もが常に使用すべき最適なスタイルはどれだと思いますか。また、その理由は何ですか? :)