J'ai peu de services REST asynchrones qui ne dépendent pas les uns des autres. C'est en "attendant" une réponse de Service1, je peux appeler Service2, Service3 et ainsi de suite.
Par exemple, reportez-vous au code ci-dessous:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Maintenant, service2Response
ne dépend pas service1Response
et ils peuvent être récupérés indépendamment. Par conséquent, il n'est pas nécessaire que j'attende la réponse du premier service pour appeler le deuxième service.
Je ne pense pas pouvoir l'utiliser Parallel.ForEach
ici car ce n'est pas une opération liée au CPU.
Pour appeler ces deux opérations en parallèle, puis-je appeler use Task.WhenAll
? Un problème que je vois utiliser Task.WhenAll
est qu'il ne renvoie pas de résultats. Pour récupérer le résultat, puis-je appeler task.Result
après avoir appelé Task.WhenAll
, car toutes les tâches sont déjà terminées et tout ce dont j'ai besoin pour nous récupérer la réponse?
Exemple de code:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
Ce code est-il meilleur que le premier en termes de performances? Une autre approche que je peux utiliser?
Parallel.ForEach
engendrerait de nouveaux threads alors async await
qu'il ferait tout sur un seul thread.
await
) avant qu'il ne soit prêt.
WhenAll
avant de faire Result
avec l'idée qu'il termine toutes les tâches avant que .Result soit appelé. Depuis, Task.Result bloque le thread appelant, je suppose que si je l'appelle une fois les tâches terminées, il retournerait immédiatement le résultat. Je veux valider la compréhension.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation
- Je ne vois pas la logique là-bas. La concurrence est la concurrence.