問題タブ [cancellationtokensource]

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 投票する
1 に答える
310 参照

c# - キャンセル トークンを使用してタスクをキャンセルする

データを取得するタスクがあります。変更するとタスクがキャンセルされ、タスクが再度開始されるという別のプロパティがありますが、以下に示す別のパラメーターを使用します。

財産:

したがって、私の問題は、このインスタンスでタスクが完了する前に、常にタスクをキャンセルしていることです。MyThingタスクの最初のインスタンスがキャンセルされたが、プロパティから起動された 2 番目のインスタンスが完了まで実行されるというこのシナリオを取得するにはどうすればよいですか?

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

c# - CancellationToken のタスク ステータスは変更されません

私はダウンローダ クラスを実装しており、タスクを使用しています。最初にタスクを作成し、CancellationToken を渡しました。タスクをキャンセルすると、タスクはキャンセルされますが、ThrowIfCancellationRequested( を呼び出した後でも、タスクのステータスはまだ実行中です) ) ステータスは同じままです。ThrowIfCancellationRequested() をスローした場合、ステータスは Canceled または Faulted であると想定されていませんか。

これが私のコードです:

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

c# - 一部のウェイターのみをキャンセルするキャンセル トークン ソースを持つことは可能ですか?

与えられた:

  • BlockingCollection<T> coll
  • CancellationTokenSource cts
  • 10 個のスレッドがブロックされていますcoll.GetConsumingEnumerable(cts.Token)

したがってcts.Cancel()、10 個のスレッドすべてをキャンセルします。

一部のスレッドのみをキャンセルするように指示できるカスタム キャンセル トークン ソースを作成することは可能ですか? そう:

ブロックされたスレッドのうち 5 つだけをキャンセルします。任意の 5。

?

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

c# - CancellationToken が別の CancellationToken によって制御されるタスクのサブセットに影響を与える良い方法

キャンセル トークンを別のキャンセル トークンによって制御されるタスクのサブセットに関連付ける方法はありますか?...この例では、2 つの cancelTokenSource を作成し、1 つを他の Cancel 関数に対して登録します。画像の読み込みをキャンセルします...それらのタスクのみをキャンセルします...しかし、すべてをキャンセルすると...すべてのタスクがキャンセルされます...これを行うより良い方法はありますか? (この方法は面倒に思えます...たとえば、いつ登録を解除するか)

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

c# - Asp.Net MVCのUIから(コントローラーで)進行中のトランザクションをキャンセルするには?

ここに画像の説明を入力

UI からコントローラーにトランザクション要求を送信し、その要求をコントローラーで処理しています。

このプロセスには約 10 秒の時間がかかる場合があります。

トランザクションの処理中、ユーザーはトランザクションをキャンセルすることができます。

したがって、すべてのコミットの前にキャンセル ボタンがクリックされたかどうかを確認する必要があります。

キャンセルボタンがクリックされたときに、コントローラーの新しいインスタンスが作成されるため、その値を新しいリクエストとして渡すことができないと思います。

別のオプションは使用しstaticています。しかし、コントローラーの静的フィールドを導入しないという提案があります。

この状況をどのように処理しますか?(何らかのトークンを使用している可能性がありますが、それでも簡単な回避策がありますか?)

0 投票する
2 に答える
2844 参照

c# - Task.Status を Canceled に設定する他の方法はありますか

わかりました。を使用してタスクをキャンセルする方法を理解しましCancellationTokenSourceた。Taskタイプ「種類」がこの例外を自動的に処理するように見えます-それはTask'sStatusを Cancelled に設定します。

これで、まだ実際に を処理する必要がありOperationCancelledExceptionます。それ以外の場合、例外は までバブルしApplication.UnhandledExceptionます。タスク自体はそれを認識し、内部で何らかの処理を行いますが、未処理の例外を回避するために呼び出しコードを try ブロックでラップする必要があります。時々、これは不要なコードのように思えます。ユーザーがキャンセルを押した場合は、キャンセルしますTask(明らかに、タスク自体もそれを処理する必要があります)。他のコード要件が必要だとは思いません。Statusプロパティでタスクの完了ステータスを確認するだけです。

言語設計の観点から、これには特定の理由がありますか? Statusプロパティをキャンセルに設定する他の方法はありますか?

0 投票する
0 に答える
1083 参照

c# - タスクをキャンセルしたのに、そのタスクの状態が「RanToCompletion」になっているのはなぜですか?

次のコードでは、ユーザーが任意のキーを押すとキャンセルされるタスクがあります。その際、タスクがキャンセルされたことを示す ContinuationTask が呼び出されます。ContinuationTask は、タスクがキャンセルされたときにのみ実行されるように構成されていますが、実際には実行されます。

しかし、呼び出しスレッドで完了後のタスクのステータスを確認すると、「RanToCompletion」が返されます。そんなことがあるものか?

コードは次のとおりです。