Maison >développement back-end >C++ >Await vs Result en C# : quand devez-vous utiliser Await au lieu d'accéder à Task.Result ?

Await vs Result en C# : quand devez-vous utiliser Await au lieu d'accéder à Task.Result ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-22 23:03:11759parcourir

Await vs. Result in C#: When Should You Use Await Instead of Accessing 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!

Déclaration:
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