3
我在我的基類中有一些事件要在IDisposable或Finalizer中應用以下模式。使用GetInvocationList取消訂閱事件處理程序
var onCategorizedMessage = this.OnCategorizedMessage.GetInvocationList().ToList();
foreach (var item in onCategorizedMessage)
this.OnCategorizedMessage -= item;
我會重複此代碼每個事件一次。
這是一個處理退出事件以防止內存泄漏的合理和可靠的方式嗎?
在許多情況下,這不是一個真正的問題。生產者是否會走出消費者? –
@BryanCrosby - 我不知道。我正在創建一個HubTransport代理,不知道託管代碼中會發生什麼。 http://msdn.microsoft.com/en-us/library/dd877026(v=exchg.140).aspx – LamonteCristo
從邏輯上講,我認爲取消訂閱是unsubscriber本身的責任。除此之外,處置時清除調用列表沒有多大意義。但是,在處置事件時(從未訂閱者本身)取消訂閱(爲了防止具有委託給已處理對象的方法的事件的調用列表),有一個BIG點。 – SimpleVar