Bonnes pratiques d'Await et Task.Result en programmation asynchrone C#
La programmation asynchrone en C# implique souvent des tâches, qui encapsulent des unités de travail de longue durée. Deux façons courantes de gérer les tâches sont await
et Task.Result
. Bien que les deux puissent obtenir des résultats similaires, il existe des différences subtiles dans leur comportement.
await
suspendra l'exécution de la méthode en cours jusqu'à ce que la tâche en attente soit terminée. Pour une tâche entièrement terminée, l'expression await
renvoie directement le résultat de la tâche, rendant le code plus propre et améliorant potentiellement les performances.
En revanche, Task.Result
récupère immédiatement les résultats de la tâche. Si la tâche échoue, elle lèvera une exception AggregateException
et pourra provoquer un blocage dans certains scénarios asynchrones. Par conséquent, il est généralement recommandé d’utiliser await
au lieu de Task.Result
.
Stephen Cleary recommande d'utiliser await
au lieu de Task.Result
, principalement pour les deux raisons suivantes :
await
n'encapsule pas les exceptions dans AggregateException
, simplifiant la gestion des erreurs dans le code asynchrone. Result
et Wait
peuvent provoquer des blocages, en particulier lorsqu'ils sont utilisés dans une méthode asynchrone. await
Éliminez ce risque en garantissant l'achèvement de la tâche avant de reprendre l'exécution. Guide d'utilisation :
Comme recommandé par Cleary, les directives suivantes s'appliquent à l'utilisation de Result
, Wait
et await
:
await
. Result
et Wait
peuvent être utilisés avec prudence et avec une documentation appropriée. Result
et Wait
sont appropriés. Le respect de ces directives garantit une gestion correcte du code asynchrone, minimise les blocages et simplifie la gestion des erreurs.
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!