Natknąłem się na to, co musi być powszechnym problemem. Kiedy mam wydarzenie, które może być subskrybowane przez kilka różnych klas, wyjątek wygenerowany przez jedną z tych klas zabije łańcuch wywołań zwrotnych; ponieważ nie wiem a priori w jakiej kolejności wykonywane jest wywołanie zwrotne, może to spowodować nieprzewidywalne zmiany stanu dla niektórych klas, a nie dla innych.Jak zatrzymać wyjątki, niszcząc mój łańcuch delegatów?
W Biblii (CLR via C#, używam C# 2.0) jest krótki akapit o użyciu MulticastDelegate.GetInvocationList
, aby ominąć to, ale nic więcej. Moje pytanie brzmi: jaki jest najlepszy sposób, aby sobie z tym poradzić? Czy muszę używać MulticastDelegate.GetInvocationList
za każdym razem, gdy mam jakieś wydarzenie? Czy muszę załączyć wszystkie metody, które można nazwać jako część łańcucha delegatów w ramach mechanizmu wycofywania zmian? Dlaczego wszystkie te opcje są tak skomplikowane w porównaniu do prostego modelu zdarzeń/delegatów, który jest tak łatwy w użyciu w języku C#? I jak mogę użyć tego prostego sposobu, nie kończąc z uszkodzonym stanem?
Dzięki!
notka Odpowiedź na Twój komentarz –