asyn c автосохранение из установщика свойств в C# WPF - PullRequest
0 голосов
/ 24 января 2020

У нас есть приложение WPF, которое автоматически сохраняет данные в базе данных, как только свойство установлено. Вызов для сохранения выполняется в асинхронном c методе.

Мне не нужно ждать вызова. Это в основном срабатывает и забывается, если не происходит исключение.

Мы обрабатываем это с событиями, вызывая событие из установщика свойств. Таким образом, мы могли бы иметь asyn c 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());
    }
}

Нужны ли нам эти события? Каковы последствия простого вызова asyn c void метода напрямую, как это? В частности, когда речь идет об обработке исключений, будет ли когда-либо ловиться исключение?

private async void Save(){}

public int Foo
{
    get => _foo;
    set
    {
        SetProperty(ref _foo, value);
        Save();
    }
}

1 Ответ

1 голос
/ 24 января 2020

Нужны ли нам эти события? Каковы последствия простого вызова asyn c void-метода, подобного этому? В частности, когда речь идет об обработке исключений, будет ли когда-либо поймано исключение?

Вызов его напрямую эквивалентен функционально. Обработка исключений будет вести себя так же.

На заметке стороннего производителя я рекомендую использовать уведомление «свойство изменено» в качестве входных данных для функции устранения неполадок, которая будет автоматически сохраняться только после небольшой задержки. И вам нужно подумать о том, как сообщить ожидающие / успешные / неудачные автосохранения пользователю.

...