Maison >développement back-end >C++ >Attendre une tâche ou une tâche.Résultat : quelle est la différence ?

Attendre une tâche ou une tâche.Résultat : quelle est la différence ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-08 08:56:42240parcourir

Await Task vs. Task.Result: What's the Difference?

await Task<T> contre Task<T>.Result en programmation asynchrone

Comprendre la différence fondamentale entre await Task<T> et Task<T>.Result est primordial pour une programmation asynchrone efficace. Illustrons cela avec un exemple pratique.

Considérez cette méthode :

<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>

Ici, Task<T>.Result est utilisé pour récupérer le résultat de la tâche. Cependant, cette approche peut avoir de graves conséquences sur la concurrence, car elle oblige le thread appelant à attendre de manière synchrone la fin de la tâche.

La programmation asynchrone résout ce problème avec élégance à l'aide de l'opérateur await, qui permet une suspension non bloquante. Voici la version améliorée et asynchrone :

<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>

Avec await, le thread appelant est libéré, permettant à d'autres tâches de se poursuivre. Une fois la tâche attendue terminée, le fil reprend et le résultat est renvoyé de manière transparente.

Essentiellement : await Task<T> facilite un véritable fonctionnement asynchrone en cédant le thread, tandis que Task<T>.Result bloque le thread jusqu'à la fin de la tâche. Une distinction cruciale réside dans la façon dont les exceptions sont gérées : Result encapsule les exceptions dans AggregateException, tandis que await renvoie directement l'exception d'origine.

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