Ho pochi servizi REST asincroni che non dipendono l'uno dall'altro. Cioè mentre "aspetto" una risposta da Service1, posso chiamare Service2, Service3 e così via.
Ad esempio, consultare il codice seguente:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Ora, service2Responsenon dipende da service1Responsee possono essere recuperati in modo indipendente. Quindi, non è necessario che attenda la risposta del primo servizio per chiamare il secondo servizio.
Non credo di poter usare Parallel.ForEachqui poiché non è un'operazione legata alla CPU.
Per chiamare queste due operazioni in parallelo, posso chiamare use Task.WhenAll? Un problema che vedo usando Task.WhenAllè che non restituisce risultati. Per recuperare il risultato posso chiamare task.Resultdopo aver chiamato Task.WhenAll, dal momento che tutte le attività sono già state completate e tutto ciò di cui ho bisogno per ricevere risposta?
Codice d'esempio:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
Questo codice è migliore del primo in termini di prestazioni? Qualche altro approccio che posso usare?
Parallel.ForEachgenerino nuovi thread mentre async awaitfarebbero tutto su un singolo thread.
await) prima che sia pronto.
WhenAllprima di fare Resultcon l'idea che completa tutte le attività prima che venga chiamato .Result. Poiché Task.Result blocca il thread chiamante, presumo che se lo chiamo dopo che le attività sono state effettivamente completate, restituirebbe immediatamente il risultato. Voglio convalidare la comprensione.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation- Non vedo la logica lì. La concorrenza è concorrenza.