Ответ 1
Если вы обрабатываете Exception
внутри делегата (в вашем случае только для целей ведения журнала), await
не приведет к возникновению исключения в обычных обстоятельствах. Это должно быть хорошо.
private async Task Test()
{
await Task.Run(() =>
{
try
{
DoingSomething();
}
catch (Exception ex)
{
log.Error(ex.Message);
}
});
}
Однако, поскольку вы await
ing Task
, скорее всего, в методе Test
будет несколько DoSomethingElse
, на которые может повлиять результат Task
- и в этом случае также имеет смысл иметь try/catch
вокруг await
.
private async Task Test()
{
try
{
await Task.Run(() =>
{
try
{
DoingSomething();
}
catch (SomeSpecialException spex)
{
// it is OK to have this exception
log.Error(ex.Message);
}
});
DoSomethingElse(); // does not run when unexpected exception occurs.
}
catch (Exception ex)
{
// Here we are also running on captured SynchronizationContext
// So, can update UI to show error ....
}
}