C# Language Aspettare e prendere

Esempio

È possibile utilizzare await espressione Attendi per applicare l'operatore Attendi a Attività o Attività (di TResult) nel catch e finally blocchi in C # 6.

Non è stato possibile utilizzare l'espressione await nel catch e finally blocchi nelle versioni precedenti a causa dei limiti del compilatore. C # 6 rende molto più semplice l'attesa di compiti asincroni consentendo l'espressione di await .

try
{
    //since C#5
    await service.InitializeAsync();
} 
catch (Exception e)
{
    //since C#6
    await logger.LogAsync(e);
}
finally
{
    //since C#6
    await service.CloseAsync();
}

È stato richiesto in C # 5 di usare un bool o dichiarare Exception al di fuori del try catch per eseguire operazioni asincrone. Questo metodo è mostrato nel seguente esempio:

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();