Maison >développement back-end >C++ >Attendre ou résultat : quand devez-vous utiliser « attendre » au lieu de « .Result » dans les tâches asynchrones C# ?

Attendre ou résultat : quand devez-vous utiliser « attendre » au lieu de « .Result » dans les tâches asynchrones C# ?

DDD
DDDoriginal
2025-01-22 22:51:09746parcourir

Await vs. Result: When Should You Use `await` Instead of `.Result` in C# Async Tasks?

Choix de await et .Result dans les tâches asynchrones C#

Dans le "C# Concurrent Programming Handbook" de Stephen Cleary, une technique a retenu mon attention :

<code class="language-csharp">var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
  return null;
return await downloadTask;</code>

Puisque downloadTask aurait été terminé sans délai d'attente, pourquoi devons-nous faire un deuxième await au lieu de revenir directement à downloadTask.Result ?

Avantages de

await par rapport à .Result

L'auteur met en évidence deux raisons principales pour utiliser await de préférence à .Result (ou Wait) :

  1. Gestion des exceptions : await n'encapsule pas les exceptions dans AggregateException, offrant un mécanisme de gestion des exceptions plus clair.
  2. Éviter les blocages : l'utilisation de .Result ou Wait dans une méthode asynchrone peut provoquer des blocages ou des problèmes d'exécution subtils.

Guide de l'utilisateur

Bien que l'utilisation de .Result ou Wait ne soit pas totalement interdite, les directives suivantes sont recommandées :

  • Code d'application asynchrone : utilisez toujours await.
  • Bibliothèque d'utilitaires asynchrones : peut être utilisée avec .Result ou Wait avec prudence et avec une documentation adéquate.
  • Code de tâche parallèle : Pour les tâches parallèles non asynchrones, .Result et Wait conviennent.

En suivant ces directives, les développeurs peuvent améliorer la gestion des exceptions, éviter les blocages et écrire du code asynchrone plus robuste et plus maintenable.

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