-1

我们有 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();
    }
}
4

1 回答 1

1

我们真的需要这些事件吗?像这样直接调用 async void 方法有什么后果?特别是与异常处理有关的情况下,是否会捕获异常?

直接调用它在功能上是等效的。异常处理的行为方式相同。

附带说明一下,我建议使用您的“属性更改”通知作为去抖动功能的输入,该功能只会在短暂延迟后自动保存。您需要考虑如何将挂起/成功/失败的自动保存信息传达给用户。

于 2020-01-24T02:25:23.703 回答