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
DDDoriginal
2025-01-13 07:16:42336parcourir

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>

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!

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