這是一個不尋常的問題;我絕不會建議在典型的.NET開發中用ManualResetEvent替換布爾值。在這種情況下,我已經需要一個ManualResetEvent來指示到另一個線程的連接狀態;鑑於此,對我而言,使用具有相同語義含義的布爾值是多餘的。ManualResetEvent是否可以取代布爾值
OK,具體:我有一個工作線程當滿足下列條件爲真應處理消息:
- 「客戶」 連接
- 「收件人」 連接
的「客戶端「和」收件人「連接是其他線程正在監視的TCP套接字;當連接狀態改變時,相應的WaitHandle將被設置(連接)或重置(斷開)。
最初,我有一個布爾值表示連接狀態(用於UI)。現在我正在使用WaitHandles來發信號通知工作線程,看起來有利於完全消除布爾狀態變量並僅使用WaitHandles。
waitEvent.WaitOne(0)
返回手柄的狀態,而不會阻塞,使其在功能上等同於測試一個布爾值(與線程安全操作的額外優點)。
因此,鑑於我已經將要使用WaitHandles,並且我不喜歡將狀態(相同的語義含義)維護成兩個不同變量的想法,我有什麼理由不能使用WaitHandles?我能想到的最重要的反駁是運行時性能:測試布爾與時間來測試WaitHandle的時間;但我認爲業績不會受到顯着影響。
我錯過了什麼重要的嗎?
謝謝!
我的想法。在所有其他條件都相同的情況下,我傾向於認爲運行時間性能差異不值得在我從現在開始的6到12個月內更新設計時出現混亂的風險。 – 2012-01-09 19:13:49
我想你已經回答了你自己的問題。不,我不介意讓我的答案或任何東西的額外代表:) – FMM 2012-01-09 21:58:20
是的,但我認爲這是值得一個「理智檢查」,以防萬一我失去了一些東西。作爲一名獨立開發人員,我經常錯失與其他有經驗的開發人員合作的機會;所以你已經贏得了額外的代表。 – 2012-01-10 18:33:41