IMyInterface реализован несколькими классами, но для одного из классов нет ожидающих вызовов.Это вызовет какие-то проблемы?
Я собираюсь проникнуть сюда на опасную территорию и не согласиться с Эриком Липпертом.В подавляющем большинстве случаев использование async
без await
действительно является ошибкой, и предупреждение компилятора полезно.Я бы сказал, что это действительно к северу от 90% времени.
Однако я бы сказал, что этот сценарий является исключением из этого правила.Проблема с простым отбрасыванием async
/ await
заключается в том, что исключения обрабатываются совершенно по-разному:
public Task DoSomethingAsync()
{
// if doSomethingElse throws, that exception is raised directly;
// it is *not* captured and placed on the returned task!
doSomethingElse();
return Task.CompletedTask;
}
Ожидаемая семантика для метода Task
-обращения заключается в том, что исключения захватываются и помещаются в возвращаемое значение.Task
(ну, по крайней мере, не исключения с костью ).Чтобы сохранить эту семантику, вам нужно либо использовать async
(и подавить предупреждение), либо явное try
/ catch
:
#pragma warning disable 1998
public async Task DoSomethingAsync()
#pragma warning restore 1998
{
doSomethingElse();
}
// or
public Task DoSomethingAsync()
{
try
{
doSomethingElse();
return Task.CompletedTask;
}
catch (Exception ex)
{
return Task.FromException(ex);
}
}