Nếu bạn xử lý Exception
bên trong các đại biểu (trong trường hợp của bạn chỉ cần để đăng nhập mục đích), await
sẽ không tăng ngoại lệ trong trường hợp bình thường. Điều này sẽ ổn thôi.
private async Task Test()
{
await Task.Run(() =>
{
try
{
DoingSomething();
}
catch (Exception ex)
{
log.Error(ex.Message);
}
});
}
Tuy nhiên, kể từ khi bạn là await
ing các Task
, có lẽ hầu hết, sẽ có một số DoSomethingElse
trong phương pháp Test
, mà có thể bị ảnh hưởng bởi kết quả của Task
- trong trường hợp này nó cũng làm cho tinh thần để có a try/catch
xung quanh 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 ....
}
}
Điều đó hoàn toàn phụ thuộc vào cách bạn có thể xử lý lỗi. – SLaks
Ngoài ra, không bao giờ viết 'async void'. – SLaks
Tôi có ý định bắt tất cả các lỗi insie od đang chờ đợi nhưng nó an toàn hơn để thêm Try Catch bên ngoài quá? – as74