私はMessengerライブラリを作成しましたが、スレッドセーフであるため、スレッド間で心配なしに共有できます。これは主にMonitorクラスを使用して実現します。2つのスレッドが同じメソッドを呼び出すときのスレッドの同期についての混乱
ログアウトルーチンは、ソケットなどをシャットダウンする前にトランザクションが発生するのを待つために時間がかかることがあります。非同期で、Begin/Endメソッドがありますが、この例ではそれが同期しているふりをする。
2つのスレッドがすぐにログアウトを呼び出すとどうなりますか? 2番目のスレッドでは何をすべきですか?
現在、最初のログアウトが完了してからAlreadyLoggedOutExceptionがスローされるまで(Monitor.Waitを使用して最初のスレッドからPulseを待つ)ブロックします。
私は、Logoutが呼び出されても既にログアウトが行われている場合に、LogoutInProgress例外がスローされているとおもしろいです。
両方に長所と短所があるようですが、私は他の人が最もよく考えるものを知りたいと思います。
非同期側は重要ではありません。どのような例外もなくログアウトが行われた後、両方のログアウトメソッドがただ返す(void)と言っていることは何ですか? – NoPyGod
両方が同じクライアントでログアウトしようとしていて、操作が冪等であれば、例外をスローすることに意味はありません。 –
例外のあるロジックは感謝しています。しかし、実際にログアウトが完了するまで、両方のログアウト・コールが「ブロック」する必要があると本当に信じていますか?理論的には、第1のログアウトはある時点で成功することが保証されているので、私は第2のログアウトから戻ることができます。私が見ている問題は、発信者に、実際にまだ起こっているときにログアウトが完了しているという錯覚を与えるということです。 – NoPyGod