Share via


async (référence C#)

Le modificateur d' async indique que la méthode, expression lambda, ou méthode anonyme qu'il modifie est asynchrone.De telles méthodes sont appelés méthodes async.

Une méthode async offre un moyen pratique d'effectuer le travail non longue sans bloquer le thread de l'appelant.L'appel d'une méthode async peut continuer son travail sans attendre la méthode async se termine.

[!REMARQUE]

Les mots clés d' async et d' await ont été introduits dans Visual Studio 2012.Pour plus d'informations sur d'autres nouvelles fonctionnalités dans cette version, consultez Nouveautés de Visual Studio 2012.

Pour une introduction à l'async programmation, consultez l' Programmation asynchrone avec Async et Await (C# et Visual Basic).

L'exemple suivant illustre la structure d'un gestionnaire d'événements async, StartButton_Click, qui appelle une méthode async, ExampleMethodAsync.Le résultat de la méthode est la longueur d'un site Web téléchargé.Le code est appropriée pour Windows Presentation Foundation (WPF) ou les fenêtres signalent l'application.

// In desktop apps that you create by using Visual Studio 2012, you must 
// add a reference and a using directive for System.Net.Http.
// In Windows Store apps, you must add using directives for System.Net.Http 
// and System.Threading.Tasks.

private async void StartButton_Click(object sender, RoutedEventArgs e)
{
    // ExampleMethodAsync returns a Task<int> and has an int result.
    // A value is assigned to intTask when ExampleMethodAsync reaches
    // an await.
    try
    {
        Task<int> intTask = ExampleMethodAsync();
        // You can do other work here that doesn't require the result from
        // ExampleMethodAsync. . . .
        // You can access the int result when ExampleMethodAsync completes.
        int intResult = await intTask;
    
        // Or you can combine the previous two steps:
        //int intResult = await ExampleMethodAsync();

        // Process the result (intResult). . . .
    }
    catch (Exception)
    {
        // Process the exception. . . .
    }
}

public async Task<int> ExampleMethodAsync()
{
    var httpClient = new HttpClient();

    // At the await expression, execution in this method is suspended, and
    // control returns to the caller of ExampleMethodAsync.
    // Variable exampleInt is assigned a value when GetStringAsync completes.
    int exampleInt = (await httpClient.GetStringAsync("https://msdn.microsoft.com")).Length;

    // You can break the previous line into several steps to clarify what happens:
    //Task<string> contentsTask = httpClient.GetStringAsync("https://msdn.microsoft.com");
    //string contents = await contentsTask;
    //int exampleInt = contents.Length; 

    // Continue with whatever processing is waiting for exampleInt. . . .

    // After the return statement, any method that's awaiting
    // ExampleMethodAsync can get the integer result.
    return exampleInt;
}

Important

Pour obtenir un exemple complet de WPF qui utilise des éléments semblables, consultez Procédure pas à pas : accès au Web avec Async et Await (C# et Visual Basic).Vous pouvez télécharger le code de procédure pas - à - pas de Exemples de code de développement.

En général, une méthode modifiée par le mot clé d' async contient au moins une expression ou une instruction d' attendez .La méthode fonctionne de façon synchrone jusqu'à ce qu'elle atteigne la première expression d' await, à laquelle le point il est interrompu jusqu'à ce que la tâche attendue terminée.Dans le même temps, le contrôle est retourné à l'appelant de la méthode.Si la méthode ne contient pas d'expression d' await ou une instruction, il exécute de façon synchrone.Un avertissement du compilateur vous signale à toutes les méthodes async qui ne contiennent pas await car cette situation peut indiquer une erreur.Pour plus d'informations, consultez Avertissement du compilateur (niveau 1) CS4014.

Le mot clé d' async est un mot clé contextuel.Il s'agit d'un mot clé lorsqu'il modifie une méthode, une expression lambda, ou une méthode anonyme.Dans tous les autres contextes, il est interprète comme identificateur.

Types de retours

Une méthode async peut avoir un type de retour d' Task, d' Task<TResult>, ou d' void.La méthode ne peut déclarer des paramètres d' référence ou d' t3c3bfhx(v=vs.110).md, bien qu'il puisse appeler les méthodes qui ont de ces paramètres.

Vous spécifiez Task<TResult> comme type de retour d'une méthode async si l'instruction d' retour de la méthode spécifie un opérande de type TResult.Vous utilisez Task si aucune valeur explicite n'est retourné lorsque la méthode est terminée.Autrement dit, un appel à la méthode retourne Task, mais lorsque Task est terminé, toute expression d' await qui attend Task a pour purger.

Le type de retour d' void est utilisé principalement pour définir des gestionnaires d'événements, où un type de retour d' void est requis.L'appel d'une méthode void- se retournante async ne peut pas l'attendre et ne peut pas intercepter des exceptions que la méthode lève une.

Pour plus d'informations et d'exemples, consultez Types de retour Async (C# et Visual Basic).

Voir aussi

Tâches

Procédure pas à pas : accès au Web avec Async et Await (C# et Visual Basic)

Référence

await (Référence C#)

AsyncStateMachineAttribute

Concepts

Programmation asynchrone avec Async et Await (C# et Visual Basic)