Асинхронное ожидание и обработчик событийC#

Место общения программистов C#
Anonymous
Асинхронное ожидание и обработчик событий

Сообщение Anonymous »

Разрешено ли преобразовать обычный обработчик событий из void в Task и ждать, как показано ниже?
Something.PropertyChanged += async (o, args) => await IsButtonVisible_PropertyChanged(o, args);
Something.PropertyChanged -= async (o, args) => await IsButtonVisible_PropertyChanged(o, args);

private Task IsButtonVisible_PropertyChanged(object sender,PropertyChangedEventArgs e)
{
if (IsSomthingEnabled)
{
return SomeService.ExecuteAsync(...);
}

return Task.CompletedTask;
}

Или сделать так?
Something.PropertyChanged += IsButtonVisible_PropertyChanged;
Something.PropertyChanged -= IsButtonVisible_PropertyChanged;

private void IsButtonVisible_PropertyChanged(object sender,PropertyChangedEventArgs e)
{
if (IsSomthingEnabled)
{
_ = SomeService.ExecuteAsync(...);
}
}

Обновление:
Или вот это: я знаю, что использование async void должно быть запрещено, поскольку исключение не перехватывается, но, возможно, для обработчика событий это нормально, поскольку обработчик событий не возвращает результат.
Something.PropertyChanged += IsButtonVisible_PropertyChanged;
Something.PropertyChanged -= IsButtonVisible_PropertyChanged;

private async void IsButtonVisible_PropertyChanged(object sender,PropertyChangedEventArgs e)
{
if (IsSomthingEnabled)
{
await = SomeService.ExecuteAsync(...);
}
}


Подробнее здесь: https://stackoverflow.com/questions/689 ... nt-handler

Вернуться в «C#»