我遇到了什麼是一個常見的問題。當我有一個可能由幾個不同的類訂閱的事件時,由這些類之一拋出的異常將會終止回調鏈;因爲我不知道按照什麼順序進行回調,這可能會導致某些類的狀態發生不可預知的變化,而對其他類不會發生。如何阻止異常垃圾我的委託鏈?
在聖經中(CLR via C#,我使用的是C#2.0),有一個關於使用MulticastDelegate.GetInvocationList
來解決這個問題的簡短的段落,但僅此而已。所以我的問題是:處理這個問題的最好方法是什麼?每次有事件時,我必須使用MulticastDelegate.GetInvocationList
嗎?或者我是否需要將所有可能作爲代理鏈的一部分調用的方法放在某種回滾機制中?爲什麼所有這些選項與在C#中很容易使用的簡單事件/委託模型相比如此複雜?我怎樣才能使用簡單的方式,而不會結束損壞的狀態?
謝謝!
注意回覆您的評論 – 2009-01-12 10:09:12