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, service2Response
non dipende da service1Response
e 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.ForEach
qui 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.Result
dopo 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.ForEach
generino nuovi thread mentre async await
farebbero tutto su un singolo thread.
await
) prima che sia pronto.
WhenAll
prima di fare Result
con 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.