等待捕获,最后

它可以使用 await 表达申请等待操作者任务任务(OF TResult)在 C 6#中 catchfinally 块。

由于编译器的限制,在早期版本的 catchfinally 块中不可能使用 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();