C# Language Attendez dans la prise et enfin


Exemple

Il est possible d'utiliser une expression en await pour appliquer un opérateur en attente à Tasks ou Task (Of TResult) dans les blocs catch et finally dans C # 6.

Il n'était pas possible d'utiliser l'expression await dans les blocs catch et finally dans les versions antérieures en raison des limitations du compilateur. C # 6 rend l'attente des tâches asynchrones beaucoup plus facile en permettant l'expression d' 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();
}

Il était nécessaire en C # 5 d'utiliser un bool ou de déclarer une Exception dehors du try try pour effectuer des opérations asynchrones. Cette méthode est illustrée dans l'exemple suivant:

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