問題タブ [autoresetevent]
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# - .NET の ManualResetEvent と AutoResetEvent の違いは何ですか?
これに関するドキュメントを読みましたが、理解していると思います。AutoResetEvent
コードが を通過すると はリセットされますが、 はリセットされませevent.WaitOne()
んManualResetEvent
。
これは正しいです?
java - Javaは.NetのAutoResetEventに相当しますか?
JavaでAutoResetEventと同等のセマンティクスを取得するには何を使用する必要がありますか?(ManualResetEventについては、この質問を参照してください)。
c# - AutoResetEvent での C# スレッドの問題
これを適切に同期する方法は?現時点では、完了SetData
後に呼び出される可能性があるため、すでに別の値に設定されている可能性があります。ロックを挿入しようとしましたが、デッドロックになりました。e.WaitOne()
d
最善の解決策は、truedataAlreadyBeenSetAndWaitingToBeProcessed
に設定された新しいブール変数を導入SetData
し、最後にDoLongOperationWith_d
true に設定できるようにするSetData
ことでしょうか。この変数を true に設定して が呼び出された場合、単に戻ることができますか?
c# - AutoResetEventコードの何が問題になっていますか?
私はこのコードを持っていますが、これは非常に簡単に見えますが、AutoResetEventが通知されることはありません。Webサービスから何も返されないようで、WaitAllは10秒後にタイムアウトします。スレッドジゲリーポケリーがなくてもすべて正常に動作するため、Webサービスの問題ではありません。私は何が間違っているのですか?
.net - AutoResetEvent.WaitOne()はスレッドプールのスロットを解放しますか?
非同期メソッドを同期しようとしています。非同期バージョンの主な利点は、スレッドプールのスロットを解放することです。同期バージョンでもこの利点を維持したいと思います。AutoResetEvent.WaitOne()を使用すると、スレッドプールの使用に関してThread.Sleep()と同等になりますか?
.net - AutoResetEvent オブジェクト、60 秒待機またはイベント
AutoResetEvent オブジェクトを使用してスレッドを 60 秒間ブロックしていますが、60 秒間または AutoResetEvent.set() イベントでブロックしたいと考えています。
コード :
しかし、それは常に60秒全体を待ちます! 信号を離しても。
c# - C#のキューと待機ハンドル
私のアプリケーションには数年前から次のコードが含まれていますが、問題が発生したことはありません。
CommandEventArrは、NewOrderEvent(自動リセットイベント)とExitEvent(手動リセットイベント)で構成されています。
しかし、これがスレッドセーフかどうかはわかりません(エンキューする前にすべてキューをロックするN個のプロデューサースレッドと、上記のコードを実行する1つのコンシューマースレッドを想定しています)。また、Queue.Countプロパティは、Queueクラスから1つのインスタンスInt32値を返すだけであると想定できます(揮発性、インターロック、ロックなどはありません)。
これを修正し、上記のコードで実行しようとしていることを実行するために、キューとAutoResetEventで使用される通常のパターンは何ですか?
(Queue.Countは何でも実行でき、その実装に固有であることが正しく指摘された後、質問を少し変更するように編集されました)。
c# - C#でのManual/AutoResetEventの軽量な代替手段
私は、C#/。NETでManualResetEventクラスとAutoResetEventクラスを使用する代わりの軽量な方法を作成しました。この背後にある理由は、カーネルロックオブジェクトを使用することの重みなしに、イベントのような機能を持つことでした。
コードはテストと本番の両方でうまく機能しているように見えますが、すべての可能性に対してこの種のことを正しく行うことは骨の折れる作業である可能性があり、これについてStackOverflowの群衆から建設的なコメントや批判を謙虚に要求します。うまくいけば(レビュー後)これは他の人に役立つでしょう。
使用法は、Set()に使用されるNotify()を使用したManual/AutoResetEventクラスと同様である必要があります。
ここに行きます:
visual-studio-2010 - ユニットテストはデバッグに合格しますが、実行時にハングします
奇妙な問題があります。実行モードでスタックし続ける単体テストがあります。ブレークポイントなしでデバッグで同じテストを実行すると、テストは毎回合格します。
基本的にはソケット接続テストです。最初にソケットを切断してから再接続を試み、再接続が成功したかどうかを確認しようとしています。
接続コードのどこかで、ソケット例外があったかどうかを確認します。これが発生すると、ユーザーにはダイアログにいくつかの選択肢が表示され、接続コードはAutoResetEventを介してハングし、決定を待ちます。
システムをハングさせるのはこのAutoResetEventです。単体テストのコードで提供する必要があります。しかし、私の質問は、なぜこれがデバッグモードで通過するのかということです。AutoResetEventsがVisualStudioによって自動的に設定されるデバッグモードについて何か特別なことはありますか?
編集
それは確かに競合状態でした。切断コードの後にコードに遅延を追加しましたが、現在は機能しています。しかし、そもそも競合状態があるのは奇妙なことです。コードの一部を貼り付けて詳しく説明します。
これはテストコードです:
これが私を襲う理由は、接続コードを呼び出す前に、diconnectコードが返されるのを待っているからです。切断コードの最後の部分は次のようになります。
Socket.Shutdown()やSocket.Close()メソッドがスレッドを実行しているためですか?したがって、切断コードから値を返しても、ソケットは実際には切断されていませんか?