等待捕獲,最後

它可以使用 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();