Насколько я понимаю, добавление asyn c void и await в этом случае будет просто бесполезным.
No.
Если Handler
вернул a Task
, тогда это будет правдой, и исключение async
/ await
будет в порядке; код без async
/ await
просто вернет Task
напрямую, вместо того, чтобы «развернуть» его с помощью await
и «обернуть» его обратно в Task
с помощью async
.
Однако это не тот случай; Handler
возвращает void
, поэтому код без async
/ await
будет просто игнорировать возвращенный Task
, что в большинстве случаев неверно (отсюда и предупреждение компилятора). В частности, игнорирование Task
будет игнорировать любые исключения из этого Task
. Ваш код также не может знать, когда проигнорированный Task
завершен, но, по-видимому, это приемлемо, поскольку ваш обработчик возвращает void
.
. Существует "регистрация", в которой методы async void
делают это. что фреймворк знает, что задача еще не завершена, поэтому фреймворк знает, когда можно безопасно завершить работу. Единственный. NET предоставленный фреймворк, который на самом деле заботится об этом, это ASP. NET pre-Core; все остальные. NET -обеспечиваемые фреймворки (включая все фреймворки пользовательского интерфейса) игнорируют эту "регистрацию".