問題タブ [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.
c# - オブジェクトが廃棄されたことを確認する方法は?
マルチスレッドアプリケーションがあり、aCancellationToken
は共有オブジェクトとして使用されています。すべてのスレッドがトリガーして、他のスレッドにジョブがキャンセルされたことを通知できます。次に、1つのスレッドがクリーンアップを実行し、このようにすべてのオブジェクトを破棄しますCancellationToken
。次に、スレッドがそれを使用しようとすると、例外が発生します。
CancellationTokenSourceは破棄されました。
オブジェクトを使用する前に、オブジェクトが廃棄されていることを確認するにはどうすればよいですか?
c# - CancellationTokenSourceおよびCancellationTokenパターンに類似したスレッドを一時停止するためのパターン?
フレームワーク4.0でConcellationTokenSourceとCancellationTokenによって提供される協調スレッドキャンセルパターンを使い始めましたが、非常に便利でシンプルであることがわかりました。
私の目的は、アプリケーションに同様のエレガントでシンプルなソリューションを提供することですが、スレッドをキャンセルするのではなく一時停止することです。この場合も、要求は一時停止コマンドのリッスンとは異なるため、PauseTokenSourceやPauseTokenのようなものがあるとよいと思いました。ですから、私の最初の質問は、協調的な一時停止のためにそのようなパターンを提案するのか、それとも他の何かより良いのかということです。
そのようなパターンを持つのが良い考えであるならば、それを行う方法について何か提案やガイドラインはありますか?現時点では、ソースはManualResetEventによって一時停止および一時停止を解除できる必要があり、トークンにはソースへの参照が含まれている必要があると思いました。それはあなたがそれを改善するための提案を私に与えることができることを願っている最初の草案に続く。
c# - CancellationTokenSource をリセットし、VS2010 でマルチスレッドをデバッグする方法は?
CancellationTokenSource を使用して関数を提供し、ユーザーが長いアクションをキャンセルできるようにしました。ただし、ユーザーが最初のキャンセルを適用すると、その後のアクションは機能しなくなります。私の推測では、CancellationTokenSource のステータスが Cancel に設定されており、それを元に戻す方法を知りたいのです。
質問 1: 初めて使用した後に CancellationTokenSource をリセットする方法を教えてください。
質問 2: VS2010 でマルチスレッドをデバッグする方法は? アプリケーションをデバッグ モードで実行すると、次のステートメントの例外が表示されます。
/li>
InvalidOperaationException はユーザー コードによって処理されませんでした クロススレッド操作が無効です: コントロール 'MainForm' は、それが作成されたスレッド以外のスレッドからアクセスされました。
ありがとうございました。
c# - TPL でメソッド呼び出しをブロックするためのタイムアウトを作成する
私はブロッキングライブラリ呼び出し、電子メールを待っている長時間実行されるサービスになるimap Idleを持っています. Idle 呼び出しは、StopIdle への同時呼び出しによって取り消すことができます。まだアイドリングしていると思われる場合は、毎分 StopIdle を呼び出す次の方法を実装しました。
以下を行うためのより良い方法はありますか?このメソッドは機能しますが、眠っているだけのスレッド プール スレッドを大量に消費することになるようです。
c# - CancellationTokenSource の誤動作
CancellationTokenSource でタスクをキャンセルした後、タスクを待機すると問題が発生します。キャンセル呼び出しはタスクを中断しません。タスクを待機すると、タスクが中断されることはないため、メインスレッドがブロックされます。
これが私のプログラムの簡単な説明です。タスクは char 変数を ('A' から 'Z' に) インクリメントし、それを GUI スレッドに表示します。これを行うために、タスクはコントロールが作成されたスレッドでデリゲート (this.invoke()) を実行します。
RefreshTextBox() 関数をコメントアウトするとすぐに、キャンセル呼び出しが機能し、タスクが中断されます。this.invoke() コマンドがタスクの中断を防いでいるかのようです。
以下のコードでは、通常のスレッドでも同じ機能を実装しています。そして、私は働きます。タスクの実装とスレッドの実装の違いはどこですか?
c# - CancellationToken を適切にリセットするには?
Async CTP
私は今朝 で遊んでいて、button
とを使った簡単なプログラムを持っていlabel
ます。をクリックするbutton
と の更新が始まりlabel
、 を停止するbutton
と への書き込みが停止しlabel
ます。CancellationTokenSource
ただし、プロセスを再開できるようにリセットする方法がわかりません。
私のコード:
asynchronous - AsyncおよびCancellationTokens/CancellationTokenSourceメモリの問題
私はまだメモリリークハントを続けており、次のことに気づきました。
System.Threading.CancellationCallbackInfoのライブインスタンスがたくさんあります-F#のデフォルトからのオブジェクト-CancellationTokenSource(Async-Workflows)。
自分でソースを宣言し、これをMailboxProcessor内で使用して子またはタスクにまたがる場合、問題はさらに悪化します。
CancellationTokenSourceが次のような参照を保持しているため、GCはこれらのスパンされたタスク/ワークフローを収集できないようです。
これらのCancellationCallbackInfo-ObjectsのほとんどはGen2に到達します-MailboxProcessors内でローカル参照を使用するだけなので信じられないほどです-「ループ」ワークフロー...
これは既知の問題ですか?解決策/回避策はありますか?
今のところ、Cancellation-supportの使用をやめ、ManualResetEventsをこのコードに通します...まったく良くありません:(
asp.net - WCF サービスで値を返した後に処理を続行する方法
私は、他のいくつかの Web サービスを順番に呼び出している WCF サービスを持っています。サービスは優先順に並べられますが、並行して呼び出されます。各サービスは true または false で応答し、すべての応答が受信されると、最も好ましい陽性がクライアントに返されます。
ただし、この間の任意の時点で、最も優先されるサービスが肯定的に応答する可能性があります。この時点で他のサービスのクエリを続行しても意味がないため、実行をキャンセルしてクライアントに結果を返したいと考えています。
私にできることはそれだけです:
上記のコードは私のコードの非常に単純化されたバージョンですが、基本的には各応答をチェックして、現在最も優先されるサービスであるかどうかを確認します。その場合、ループをキャンセルします。
ただし...この方法でループをキャンセルすると、ループを終了する前に、既に呼び出されたサービスが終了するのを待ちます。いずれかのサービスがタイムアウトになる可能性は十分にありますが、もちろんこれは否定的なものとして扱われます。そのうちの 1 つでもタイムアウトになると、応答時間が 10 秒長くなります。
私がやりたいことは、次のいずれかです。
- 優先サービスをクライアントに返し、すでに開始されているサービスからの応答の処理を続行します (これは、これらのサービスの正/負の割合を知るための純粋なログ記録のためです)。
- ループを即座にキャンセルし、残りの応答を忘れます。理想的には、これを行いたくありません。これは、肯定的に応答したサービスがそのように記録されず、好みの評価に影響することを意味するためです。
だから私の質問はこれです:
私が達成したいことは可能ですか?私は、parallel.foreach がこの仕事に最適なツールではないかもしれないこと、またはクライアントに応答した後に応答をログに記録できないかもしれないことを認識しています。最も重要な要件は、「勝者」がすでに選択されている場合に、サービスが応答するのを待たずに、クライアントが迅速な応答を受信することです。
c# - Best practice for consistently cancelling Async CancellationTokenSource
So I have a combobox on my UI that on SelectionChanged it asynchronously goes off to a web service to pull back some information to be displayed on the UI (using the new C#5 async/await keywords). What I'm looking to do is cancel the current async request before sending a new one; for example if the user uses the keyboard to quickly cycle through all of the combobox items, the SelectionChanged event could fire multiple times (generating multiple async requests) before even the first async request returns.
So my async function that gets called from the combobox's SelectionChanged event looks like this:
Where Connections is a property that goes off and hits the web service. So because the CancellationTokenSource cannot be reused once cancelled, I'm thinking of doing this:
The problem though is that sometimes I will be calling Cancel() when there is no async command running (e.g. the first time this function is called); so if I hookup any cancellation event handlers they will get called, even before I have made an async request.
Is there anyway to check if an async request is already running? Other than me doing something like:
I have a few async functions that all use the same CancellationTokenSource, so I would have to implement this "plumbing" in all of those functions. Is this the best approach? Or is there a better way?
Also, if I expose _cancellationTokenSource publically so that other classes can register cancellation delegates with it, what is the best way to "transfer" these delegates over to the new CancellationTokenSource, since I'm creating a new one every time?
Thanks in advance!
task - CancellationTokenSourceと手動でタスクを終了する
タスクを作成するとします
タスクを終了するグローバルブール値を使用してタスクを終了する方がよいでしょうか。
それとも、CancellationTokenSourceを使用する方が良いですか?
CancellationTokenSourceを使用してタスクを終了するのはいつ適切ですか?
CancellationTokenSourceを使用して、一貫性のない状態のままにすると、例外がスローされるだけですか?
ありがとう