我在Windows服務中使用異步回調來接收網絡上的UDP數據廣播。捕獲在UDPClient.EndReceive拋出的ObjectDisposedException異常
該回調使用UDPClient.EndReceive()
方法結束待處理的異步接收。在服務OnStop()
方法I UDPClient.Close()
期間的UDP客戶端。在此之後,我經常在異步回調的下一個EndReceive()
調用中獲得ObjectDisposedException
,該回調正在另一個線程上訪問。
很明顯,我在接收回調中發現這個異常並沒有問題,但我想確信在關閉服務時(如預期)拋出被捕獲的ODE,而不是因爲某些其他原因。我可以創建一個設置的布爾型標誌,並指出服務何時停止,並在catch
塊中檢查該標誌,但是我覺得我忽略了更優雅的解決方案。
我該如何確保我所捕捉的ODE是預期的ODE,而不是真正意想不到的異常?
正好趕上ODE和不添加任何口哨,他們只是增加線程錯誤到你的代碼。 MSDN文檔通常不會描述所有可能的異常,但是在Socket.EndReceive()文章中,ODE的含義非常明確。這個插座是一個死亡的士兵,趕上ODE並快速離開。 –
感謝Hans提供的信息。該文章明確表示ODE對於套接字意味着什麼,這是真的,但對於套接字已關閉的原因似乎並不明確。我知道你的建議可能是生產的方式,但是在測試中,我仍然想要一種方法來確保ODE是由於我的**預期處置UDP客戶端而導致套接字關閉,而不是由於其他錯誤或錯誤或故障。真的沒有必要嗎? – khargoosh
必須趕上ODE是不使用良好協議的標誌。另一臺機器並沒有像它應該說再見。但這很常見,通常是因爲沒有這樣的協議。或者因爲有人蔘與,即使沒有完成,他也想停止該程序。 UDP已經是一個失敗的原因。 –