Dans -pth Discussion des principales différences dans la programmation asynchrone
et await Task.Run(); return;
return Task.Run()
Dans le domaine de la programmation asynchrone, une utilisation intelligente des mots clés
peut améliorer considérablement la lisibilité et les performances du code. Cependant, une question subtile apparaît: y a-t-il une différence fondamentale entre async
et await
? Pour clarifier ce problème, nous discuterons des détails de l'opération de ces deux méthodes. await Task.Run(); return;
return Task.Run()
Les différences dans le mécanisme de communication anormal
Une différence clé est le mode de communication anormal. Les anomalies rencontrées dans la méthode asynchrones seront transmises au dos , et à travers le
,, Task
ou await task
observant l'état de sommeil avant le task.Wait()
. Même si l'anomalie provient de la partie de synchronisation de la méthode, la situation est le cas. task.Result
task.GetAwaiter().GetResult()
Jetons un coup d'œil aux scènes suivantes: Task
Si est appelé avec
ensemble, il sortira:static async Task OneTestAsync(int n) { await Task.Delay(n); } static Task AnotherTestAsync(int n) { return Task.Delay(n); } static void DoTestAsync(Func<int, Task> whatTest, int n) { Task task = null; try { task = whatTest(n); Console.Write("Press enter to continue"); Console.ReadLine(); task.Wait(); } catch (Exception ex) { Console.Write("Error: " + ex.Message); } }
DoTestAsync
Il convient de noter que OneTestAsync
peut provoquer des anomalies pendant la vérification. Cependant, lorsque <,> est utilisé, le comportement de la communication anormale est différent, comme indiqué ci-dessous:
<code>Press enter to continue Error: One or more errors occurred. Error: 2nd</code>
<步> L'exécution de l'asynchrone et non-étape Delay(-2)
AnotherTestAsync
<code>Error: The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer. Parameter name: millisecondsDelayError: 1st</code>
L'influence du contexte synchrone
L'opération asynchrone est effectuée dans le contexte synchrone, le contexte détermine comment fonctionner et quand communiquer avec l'élément d'interface utilisateur. async/await
Le symbole de fonctionnement est intrinsèquement traité le contexte synchronisé pour s'assurer que le code suivant est appelé dans le contexte correct. S'il n'y a pas de , cette responsabilité incombera au programmeur, ce qui peut entraîner le problème des verrous morts ou de la synchronisation du thread. return Task.Run()
et dépend du comportement de communication anormal requis, de l'application asynchrone et non pas et des considérations de contexte synchrones. Le premier est généralement plus adapté à un traitement anormal plus précis et à une gestion du contexte de synchronisation correct, tandis que le second peut simplifier la structure du code dans certains cas, mais doit être utilisé avec prudence pour éviter les pièges potentiels.
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!