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(); }
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(); }
É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!