等待捕獲,最後
它可以使用 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();