我们有 WPF 应用程序,一旦设置了属性,它就会自动将数据保存到数据库中。执行保存的调用是在异步方法中。
我不需要等待电话。除非发生异常,否则基本上就是一劳永逸。
我们正在使用事件处理这个问题,从属性设置器中调用事件。通过这种方式,我们可以拥有 async void 事件处理程序,然后在保存例程中一直处于 async/await 状态。异常处理在这种模式下运行良好。
private async void Save(object sender, PropertyChangedEventArgs e){}
private event PropertyChangedEventHandler SaveEvent;
public MyClass()
{
SaveEvent += Save;
}
public int Foo
{
get => _foo;
set
{
SetProperty(ref _foo, value);
SaveEvent?.Invoke(this, new PropertyChangedEventArgs());
}
}
我们真的需要这些事件吗?像这样直接调用 async void 方法有什么后果?特别是与异常处理有关的情况下,是否会捕获异常?
private async void Save(){}
public int Foo
{
get => _foo;
set
{
SetProperty(ref _foo, value);
Save();
}
}