Maison >développement back-end >C++ >« Task.GetAwaiter().GetResult() » est-il une meilleure alternative à « Task.Result » pour le blocage synchrone ?

« Task.GetAwaiter().GetResult() » est-il une meilleure alternative à « Task.Result » pour le blocage synchrone ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-24 11:47:09148parcourir

Is `Task.GetAwaiter().GetResult()` a Better Alternative to `Task.Result` for Synchronous Blocking?

Task.GetAwaiter().GetResult() est-il équivalent à Task.Result ?

Dans la programmation asynchrone, les méthodes asynchrones doivent parfois être exécutées de manière synchrone. Une solution consiste à utiliser Task.GetAwaiter().GetResult(), mais cela peut entraîner un blocage et un épuisement des ressources du pool de threads. Cependant, il est considéré comme supérieur à Task.Wait et Task.Result car il propage l'exception directement au lieu de l'envelopper dans AggregateException.

La différence entre

Task.GetAwaiter().GetResult(), Task.Wait et Task.Result

Task.Wait et Task.Result encapsulent automatiquement les exceptions dans AggregateException pour la compatibilité avec les versions antérieures du framework. En revanche, Task.GetAwaiter().GetResult() propage directement les exceptions, évitant ainsi les problèmes d'empaquetage.

Task.GetAwaiter().GetResult()Avantages

L'équipe Microsoft PFX a déclaré que task.GetAwaiter().GetResult() permet aux développeurs d'accéder directement à la logique de propagation des exceptions utilisée par l'opérateur await. Ceci est utile dans les scénarios où l'exception d'origine doit être conservée sans emballage.

L'expert Stephen Cleary souligne en outre la clarté de Task.GetAwaiter().GetResult(). Il explique qu'il exprime explicitement la vérification des erreurs et le recommande comme méthode privilégiée pour le blocage synchrone dans des cas spécifiques.

Attention :

Malgré les avantages évidents de Task.GetAwaiter().GetResult(), le recours à celui-ci, Task.Wait et Task.Result doit être évité au profit de méthodes "async/await" qui sont plus appropriées et ne provoquent pas de blocages. Ces méthodes ne doivent être utilisées que dans des circonstances particulières.

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