Рецензент полностью прав.
Единственная ситуация, которую вы использовали бы Task.FromException
, - это когда вы находитесь в методе, который вы не можете или не можете реализовать с использованием async
и await
, и вы хотите, чтобы результат задачи был исключением.
Идиот, но в любом случае:
public Task<int> NotReallyAsync()
{
if (new Random().Next(2) == 0)
return Task.FromResult(42);
return Task.FromException<int>(new InvalidOperationException());
}
Итак, давайте разберемся с вашими вопросами один за другим:
Рецензент говорит, что Task.FromException
следует использовать только в не-1016 * / await
методе, в методе async
/ await
вместо этого следует просто перебросить исключение:
catch (Exception e)
{
Log.Logger.Error(e.ToString());
throw;
}
или если вы внедрили фильтр исключений:
catch (Exception e) when (Log.Logger.ExceptionFilter(e)) { }
Да, рецензент прав.
- Поскольку это не нужно, вместо этого просто сбросьте исключение. Если вы хотите выбросить исключение, просто бросьте его. Цель
async
/ await
состоит в том, чтобы иметь возможность писать ваш метод обычным способом, поэтому напишите обычный оператор throw или обычный catch-блок.
- Не
async
/ await
методов, и только это.