等待捕获,最后
它可以使用 await
表达申请等待操作者到任务或任务(OF TResult)在 C 6#中 catch
和 finally
块。
由于编译器的限制,在早期版本的 catch
和 finally
块中不可能使用 await
表达式。通过允许 await
表达式,C#6 使等待异步任务变得更加容易。
try
{
//since C#5
await service.InitializeAsync();
}
catch (Exception e)
{
//since C#6
await logger.LogAsync(e);
}
finally
{
//since C#6
await service.CloseAsync();
}
在 C#5 中需要使用 bool
或在 try catch 之外声明 Exception
来执行异步操作。此方法如以下示例所示:
bool error = false;
Exception ex = null;
try
{
// Since C#5
await service.InitializeAsync();
}
catch (Exception e)
{
// Declare bool or place exception inside variable
error = true;
ex = e;
}
// If you don't use the exception
if (error)
{
// Handle async task
}
// If want to use information from the exception
if (ex != null)
{
await logger.LogAsync(e);
}
// Close the service, since this isn't possible in the finally
await service.CloseAsync();