Angenommen, ich eine Methode, die den Zustand eines Objekts ändert, und löst ein Ereignis-Listener dieser Zustandsänderung mitzuteilen:Kann ich starke Ausnahmesicherheit und Ereignisse haben?
public class Example
{
public int Counter { get; private set; }
public void IncreaseCounter()
{
this.Counter = this.Counter + 1;
OnCounterChanged(EventArgs.Empty);
}
protected virtual void OnCounterChanged(EventArgs args)
{
if (CounterChanged != null)
CounterChanged(this,args);
}
public event EventHandler CounterChanged;
}
Die Ereignishandler eine Ausnahme auslösen kann, auch wenn IncreaseCounter
erfolgreich die Zustandsänderung abgeschlossen. So haben wir nicht stark haben exception safety hier:
Die starke Garantie: dass der Betrieb entweder abgeschlossen hat erfolgreich oder eine Ausnahme geworfen, den Programmzustand verläßt genau wie es war, bevor der Betrieb gestartet.
Ist es möglich, eine starke Ausnahmesicherheit zu haben, wenn Sie Ereignisse auslösen müssen?
Mit anderen Worten, das Erzielen einer starken Ausnahmesicherheit in Methoden, die Ereignisse auslösen, geht auf Kosten von Ausnahmen. Das ist fast immer eine schlechte Sache, daher kam ich zu dem Schluss, dass es wahrscheinlich nicht wert ist, eine starke Ausnahmesicherheit zu erreichen. –