我正在呼叫 ServiceBusClient.DisposeAsync 來處理客戶端物件。但是,有從這個物件創建的處理器開始拋出一個例外,說該物件已被釋放并且它不能再監聽了。有沒有辦法在呼叫 dispose 時觸發服務處理器的自動關閉?或者,我應該獲取從該客戶端創建的所有處理器,然后停止監聽?
uj5u.com熱心網友回復:
最簡潔的答案是不; 處理器故意沒有“處理時停止處理”行為。您的應用程式負責呼叫StopProcessingAsync.
更多背景:
ServiceBusClient擁有由它生成的所有子物件共享的連接。關閉/處置客戶端將有效地處置其孩子。如果您嘗試在該點呼叫服務操作,則會觸發錯誤。
在處理器的情況下,應用程式負責呼叫啟動和停止。因為處理器被設計為具有彈性,所以它的目標是在遇到故障時繼續恢復并繼續嘗試向前推進,直到呼叫停止。
雖然處理器確實知道一組已處置的網路資源是終端的,但它無法理解您的意圖。您的應用程式是否ServiceBusClient以停止相關處理器為目的而關閉?它是否在沒有意識到處理器仍在運行的情況下關閉了客戶端?
因為意圖不明確,我們必須走更安全的道路。處理器將繼續運行,因為它們會將例外顯示給應用程式的錯誤處理程式 - 這確保您的應用程式知道存在問題并允許您以最適合應用程式需求的方式回應。
另一方面,如果處理剛剛停止并且您不打算發生這種情況,那么您的應用程式將更難以檢測和修復。你只會知道處理器停止了它的作業,如果沒有大量調查,你很有可能無法理解原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/468043.html
