Maison > développement back-end > C++ > « Task.Result » vs « wait Task » : quand devez-vous utiliser lequel ?

« Task.Result » vs « wait Task » : quand devez-vous utiliser lequel ?

Susan Sarandon
Libérer: 2025-01-08 09:02:41
original
421 Les gens l'ont consulté

`Task.Result` vs. `await Task`: When Should You Use Which?

Comprendre Task<T>.Result et await Task<T> en programmation asynchrone

En programmation asynchrone, le choix entre await Task<T> et Task<T>.Result a un impact significatif sur les performances et la gestion des exceptions. Examinons les principales différences.

La méthode GetName illustre les deux approches :

Utilisation de Task<T>.Result :

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return nameTask.Result;
}</code>
Copier après la connexion

nameTask.Result bloque le fil de discussion en cours jusqu'à ce que la tâche soit terminée. Ceci est inefficace pour les opérations de longue durée, car cela peut provoquer le gel des applications.

Utilisation de await Task<T> :

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return await nameTask;
}</code>
Copier après la connexion

await nameTask libère le thread appelant, permettant à d'autres tâches de s'exécuter simultanément. La méthode ne reprend que lorsque nameTask se termine.

Distinctions critiques :

  • Blocage des fils : Task<T>.Result blocs ; await Task<T> ne le fait pas.
  • Gestion des exceptions : await Task<T> propage directement les exceptions ; Task<T>.Result les enveloppe dans un AggregateException.

Bonnes pratiques :

  • Éviter Task.Factory.StartNew pour les tâches en arrière-plan ; utilisez Task.Run à la place pour une efficacité améliorée et une meilleure intégration avec le pool de threads .NET.
  • Bien que Task<T>.Result et Task.Factory.StartNew puissent être utilisés pour le parallélisme dynamique des tâches, ils sont généralement déconseillés dans des contextes de programmation asynchrone au profit de await pour une meilleure réactivité et maintenabilité. L'utilisation de await est l'approche préférée et la plus robuste pour les opérations asynchrones.

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