Maison >développement back-end >C++ >Await vs Result en C# : quand devez-vous utiliser Await au lieu d'accéder à Task.Result ?
Comparaison de l'attente et du résultat en programmation asynchrone C#
En programmation asynchrone C#, le mot-clé await
est utilisé pour suspendre l'exécution jusqu'à ce que la tâche soit terminée. Cependant, certains développeurs se demanderont si la tâche est terminée, pourquoi await
est-il nécessaire ? N'est-il pas possible d'accéder directement à l'attribut Task.Result
? Cet article explorera cette question et expliquera pourquoi await
doit être utilisé de préférence.
Stephen Cleary recommande l'extrait de code suivant dans son livre "Concurrency in C# Cookbook" :
<code class="language-C#">var completedTask = await Task.WhenAny(downloadTask, timeoutTask); if (completedTask == timeoutTask) return null; return await downloadTask; </code>
Ici, downloadTask
représente une requête HTTP GET et timeoutTask
sert de moniteur de délai d'attente. Si la requête HTTP ne se termine pas dans le délai imparti, timeoutTask
se termine.
Supposons que la requête HTTP se termine avant l'expiration du délai. Dans ce cas, downloadTask
est terminé. Alors pourquoi l'extrait de code utilise-t-il une seconde await
? Pourquoi ne pas simplement utiliser downloadTask.Result
?
La réponse réside dans les nuances de la gestion des exceptions et des blocages potentiels. await
gère les exceptions différemment de Result
ou Wait
. await
Évitez d'encapsuler les exceptions dans AggregateException
, ce qui est généralement indésirable dans le code asynchrone. De plus, Result
et Wait
peuvent provoquer des blocages, en particulier dans les méthodes asynchrones.
Par conséquent, il est recommandé de donner la priorité à await
à moins qu'il ne soit clair que la tâche est terminée. En général, l'utilisation de Result
et Wait
doit être évitée dans le code d'application asynchrone. Ils peuvent occasionnellement être utilisés dans des bibliothèques d'utilitaires asynchrones ou dans du code de tâches parallèle.
En suivant ces directives, les développeurs peuvent améliorer la sécurité et la maintenabilité des bases de code asynchrones, ainsi que la lisibilité du code.
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!