Maison > développement back-end > C++ > Comment attendre correctement les appels de méthode asynchrone dans la méthode principale de C# ?

Comment attendre correctement les appels de méthode asynchrone dans la méthode principale de C# ?

Linda Hamilton
Libérer: 2025-01-03 20:07:39
original
795 Les gens l'ont consulté

How to Properly Await Asynchronous Method Calls in C#'s Main Method?

Appel de méthodes asynchrones dans Main

En C#, il est possible d'utiliser la programmation asynchrone pour effectuer des opérations de manière non bloquante. Les méthodes asynchrones permettent d'exécuter une tâche simultanément avec un autre code, libérant ainsi le thread pour gérer d'autres tâches. Cependant, lors de l'appel d'une méthode asynchrone à partir de la méthode Main, qui n'est pas elle-même une méthode asynchrone, nous devons effectuer quelques ajustements pour permettre à la méthode Main d'attendre la fin de l'opération asynchrone.

Utilisation de la méthode Main Async (C# 7.1 et versions ultérieures)

À partir de C# 7.1, la méthode Main peut être modifiée pour être asynchrone, permettant l'utilisation directe de l'opérateur d'attente. Cela permet à la méthode Main d’agir comme point d’entrée pour les opérations asynchrones. Par exemple :

static async Task Main(string[] args)
{
    test t = new test();
    await t.Go();
    Console.WriteLine("finished");
    Console.ReadKey();
}
Copier après la connexion

Utilisation de la méthode d'attente de blocage (versions antérieures de C#)

Pour les versions antérieures de C#, la méthode Main ne peut pas être déclarée comme asynchrone. Au lieu de cela, l’opérateur wait ne peut pas être utilisé directement. Nous devons attendre manuellement la fin de l'opération asynchrone à l'aide de la méthode Wait. Par exemple :

static void Main(string[] args)
{
    test t = new test();
    t.Go().Wait();
    Console.WriteLine("finished");
    Console.ReadKey();
}
Copier après la connexion

Éviter les blocages

L'exemple fourni dans la question tente d'utiliser GetAwaiter.OnCompleted pour gérer l'achèvement de la tâche Go. Cependant, cela peut conduire à un blocage car il tente d'exécuter une continuation synchrone sur un contexte déjà synchronisé. En modifiant la méthode Main pour qu'elle soit asynchrone ou en utilisant la méthode Wait comme mentionné ci-dessus, nous évitons ce problème et permettons à l'opération asynchrone de se terminer correctement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal