問題タブ [manualresetevent]
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# - Async、Await、ManualResetEvents を適切に使用して無限 while ループを制御する方法
だから私がここでやろうとしていることは次のとおりです。
- キューが空でない場合は、エンジンをループさせてオブジェクトを処理します。
- キューが空の場合、manualresetevent を呼び出してスレッドをスリープ状態にします。
- アイテムが追加され、ループがアクティブでない場合、manualresetevent を設定します。
- 高速化するために、リストから最大 5 つの項目を選択し、非同期で操作を実行して、すべてが完了するのを待ちます。
問題:
- AddToUpdateQueueMethod への新しい呼び出しが呼び出されるとすぐに、2 つのリストの clear メソッドが呼び出されます。
- 私の頭の中で Task.WhenAll(tasks) を待っているので、スレッドはその完了を待ってから先に進む必要があるため、リストのクリアは Task.WhenAll(tasks) が戻った後にのみ呼び出す必要があります。
ここで何が欠けているのか、これを達成するためのより良い方法は何ですか.
c++ - ManualResetEvent c++/cli で DownloadFileAsync を待機中
C++/CLI で Windows フォーム アプリケーションを使用するときに、ちょっとしたイライラする問題があります。
問題は、WebClient インスタンスを使用して Web サーバーからファイルをダウンロードする必要があることです。通常、私は DownloadFile を使用し、DownoadFileAsyn は使用しませんが、ダウンロード ファイルの進行状況を示すプログレス バーを表示したい場合は、DownloadFileAsyn を使用する必要があります。では、ダウンロードのプロセスが完了するまで待つにはどうすればよいですか?
コードは次のとおりです。
したがって、ダウンロードが完了すると、プログラムは実行を停止し、mre->WaitOne() 命令の後に、上記の命令ブロックを実行しません。DownloadFileCompleted() は実行されず、実際にはメッセージボックスも表示されます。
何か案は?私はこの問題を探しましたが、多くの人がこの問題を抱えていましたが、c# のみでした。そして、ソリューションをC#からC ++に「翻訳」しました。しかし、うまくいきません...
c# - ManualResetEvent はスレッドプールの完了を待っていません
処理するバッチのリストがあります。永遠に。
各チャンク (5) を並行して実行し、完了したら次のチャンクに移動します。
何らかの理由で、次のコードはチャンクが完了するのを待機せず、完了していなくても続行します。
c# - C#は、Task.WhenAll() でイベントを発生させます
プロデューサーとコンシューマーの乗算タスク クラスがあります。私は方法を持っています:
開始方法があります:
問題は、DoneEventが発生することですが、サブスクライバー イベント ハンドラーが実行されないことです。イベント ハンドラーの実行に成功した唯一の方法は、Run メソッドをasyncにして await beforeを追加したことTask.WhenAll(..)
です。しかし、その後、別の問題が提起されました。メソッドConsume()
にはManualResetEvent PauseBlock
. また、リセットされると、メインスレッドも待機します。
事前にthnx。
編集: 私はそれを正しく行うことができました(2日後)、Runメソッドを少し変更しました:
現在、正しく動作しています。参考までに消費者の方法:
皆様にthnx. 改善すべき点について何か提案があれば、私はそれを見たいと思います。
c# - 同じメソッドでの複数の非同期呼び出し。正しい方法は?
IP アドレス プロバイダーの URL の 1 つからパブリック IP アドレスを取得する必要があります。問題は、これらのサービスは信頼できないため、別の URL にフォールバックする必要があることです。最大のパフォーマンスを得るために、すべてのサービス プロバイダーに対して WebRequest を同時に開始し、最初に応答したプロバイダーの結果を考慮したいと考えています。
これは私が書いたコードです。それは絶対にうまくいきます。しかし、私は使用しEventWaitHandle
ました。WaitHandle
これが正しい方法であるかどうか、または使用せずに(async/awaitのみを使用して)同じことを行うことが可能かどうかを知りたいだけですか?
MyResetEvent クラスは次のとおりです。
c# - ManualResetEvent.WaitOne() は NullReferenceException をスローします: オブジェクト参照がオブジェクトのインスタンスに設定されていません
ManualResetEvent.WaitOne() を処理するときに奇妙なランダム NPE エラーが発生します。これが私のコードです。
ManualResetEvent オブジェクトを作成するメソッドがあり、それを依存関係パラメーター (manualResetEvent) の 1 つとして Windows Workflow Foundation (WWF) ワークフロー インスタンスに渡し、manualResetEvent.WaitOne() API に入ります。
WWF 内でジョブが完了したら、単純に manualResetEvent.set() を呼び出します。
これらはすべて正常にコンパイルされ、実行中に、フローが期待どおりに WWF に入り、呼び出し元も WaitOne() 呼び出しを待機することがわかります。
WWF が manualResetEvent.Set() を呼び出して呼び出し元に通知した瞬間、呼び出し元が WWF ではない NPE 例外が表示されます。
System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
この例外がどこから発生するのか本当にわかりません。VS IDE でこのコードをデバッグすると、すべて正常に動作しますが、アプリケーションがリリース モードの場合にのみ、この例外が表示されます。
ここで何が間違っていますか?