C# WPF 中 属性 setter 的异步自动保存
async autosave from property setter in C# WPF
我们有 WPF 应用程序,一旦设置了 属性,它就会自动将数据保存到数据库中。执行保存的调用是在异步方法中。
我不需要等待电话。它基本上是即刻即弃,除非发生异常。
我们正在处理事件,从 属性 setter 调用事件。通过这种方式,我们可以拥有 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();
}
}
Do we really need these events? What are the ramifications of just calling the async void method directly like this? Specifically as it pertains to exception handling, will an exception ever be caught?
直接调用它在功能上是等效的。异常处理的行为方式相同。
附带说明一下,我建议使用您的 "property changed" 通知作为去抖功能的输入,该功能只会在短暂延迟后自动保存。而且您需要考虑如何向用户传达 pending/successful/failed 自动保存。
我们有 WPF 应用程序,一旦设置了 属性,它就会自动将数据保存到数据库中。执行保存的调用是在异步方法中。
我不需要等待电话。它基本上是即刻即弃,除非发生异常。
我们正在处理事件,从 属性 setter 调用事件。通过这种方式,我们可以拥有 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();
}
}
Do we really need these events? What are the ramifications of just calling the async void method directly like this? Specifically as it pertains to exception handling, will an exception ever be caught?
直接调用它在功能上是等效的。异常处理的行为方式相同。
附带说明一下,我建议使用您的 "property changed" 通知作为去抖功能的输入,该功能只会在短暂延迟后自动保存。而且您需要考虑如何向用户传达 pending/successful/failed 自动保存。