Maison > développement back-end > C++ > Task.Result vs Task.GetAwaiter().GetResult() : quelle est la différence entre l'exécution synchrone et la gestion des exceptions ?

Task.Result vs Task.GetAwaiter().GetResult() : quelle est la différence entre l'exécution synchrone et la gestion des exceptions ?

Linda Hamilton
Libérer: 2025-01-24 11:37:09
original
232 Les gens l'ont consulté

Task.Result vs. Task.GetAwaiter().GetResult(): What's the Difference in Synchronous Execution and Exception Handling?

Exécution synchrone de tâches asynchrones : la différence entre Task.Result et Task.GetAwaiter().GetResult()

Lorsque vous utilisez des méthodes asynchrones, vous devez parfois les exécuter de manière synchrone. Cependant, il existe deux manières courantes d'exécuter de manière synchrone : Task.Result et Task.GetAwaiter().GetResult(), et il existe des différences clés entre elles.

Comparaison de Task.Wait et Task.GetAwaiter().GetResult()

Task.Wait et Task.GetAwaiter().GetResult() permettent tous deux d'exécuter des tâches asynchrones de manière synchrone. Cependant, leurs mécanismes de gestion des exceptions sont différents. Task.Wait enveloppe toute exception dans AggregateException, tandis que Task.GetAwaiter().GetResult() lève directement l'exception d'origine.

Suggestions

Pour gérer directement les exceptions brutes, Task.GetAwaiter().GetResult() est meilleur que Task.Wait. Cependant, les deux méthodes doivent être évitées au profit de l'utilisation de async/await car les deux premières peuvent entraîner des blocages et des problèmes d'épuisement des ressources du pool de threads.

Raison de la différence

La différence de gestion des exceptions entre

Task.Wait et Task.GetAwaiter().GetResult() provient des exigences strictes de compatibilité de Microsoft. Pour éviter de casser le code existant, Task.Wait conserve son comportement de blocage d'origine, en encapsulant les exceptions dans AggregateException.

Pour déclencher directement la propagation des exceptions, vous pouvez utiliser task.GetAwaiter().GetResult(). Notez que Task.Result vérifie les erreurs de tâche plutôt que de bloquer son exécution.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal