Maison > développement back-end > C++ > Comment puis-je exécuter et collecter efficacement les résultats des tâches asynchrones parallèles dans .NET 4.5 ?

Comment puis-je exécuter et collecter efficacement les résultats des tâches asynchrones parallèles dans .NET 4.5 ?

DDD
Libérer: 2025-01-13 07:16:42
original
375 Les gens l'ont consulté

How Can I Efficiently Run and Collect Results from Parallel Async Tasks in .NET 4.5?

Exécutez des tâches asynchrones en parallèle et collectez les résultats dans .NET 4.5

Introduction :

Exécuter simultanément des tâches de longue durée et collecter leurs résultats est une exigence courante dans les applications .NET. Dans .NET 4.5, avec l'introduction de la programmation asynchrone, l'approche traditionnelle basée sur les threads a évolué. Cet article explore les meilleures façons d’implémenter l’exécution parallèle de tâches asynchrones dans .NET 4.5.

Code d'origine :

Le code fourni démontre l'approche de base consistant à utiliser Task.Run() pour lancer deux tâches de longue durée, puis à utiliser Result pour récupérer leurs résultats. Cependant, cette méthode présente certaines limites :

  • Le sommeil ne peut pas être une méthode asynchrone qui peut attendre d'autres méthodes.
  • Le code est maladroit et ne profite pas des nouvelles fonctionnalités du langage.
  • Un blocage des résultats peut survenir lors de l'utilisation de Result, ce qui affectera les performances.

Code invalide :

Une tentative de création d'une tâche non en cours d'exécution en appelant une méthode asynchrone échoue car la méthode asynchrone démarre l'exécution immédiatement.

Meilleure solution :

La meilleure solution consiste à utiliser une version asynchrone d'une tâche de longue durée et à exploiter la méthode Task.WhenAll(). Un exemple est le suivant :

<code class="language-csharp">async Task<int> LongTask1() { 
  // ...长时间运行的任务1...
  return 0; 
}

async Task<int> LongTask2() { 
  // ...长时间运行的任务2...
  return 1; 
}

// ...
{
   Task<int> t1 = LongTask1();
   Task<int> t2 = LongTask2();
   await Task.WhenAll(t1,t2);
   //现在我们可以访问t1.Result和t2.Result
}</code>
Copier après la connexion

Ce code crée des tâches asynchrones pour LongTask1 et LongTask2, puis attend qu'elles se terminent à l'aide de Task.WhenAll(). Cela permet aux tâches de s'exécuter simultanément sans blocage. Enfin, les résultats sont accessibles à l'aide de t1.Result et t2.Result.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal