【发布时间】:2023-03-14 09:56:01
【问题描述】:
假设我有一个方法可以改变一个对象的状态,并触发一个事件来通知监听器这个状态改变:
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;
}
即使IncreaseCounter 成功完成状态更改,事件处理程序也可能抛出异常。所以我们这里没有强大的exception safety:
强有力的保证: 操作已完成 成功或抛出异常, 完全保持程序状态 那是在手术开始之前。
当你需要引发事件时,是否有可能拥有强大的异常安全性?
【问题讨论】: