Eu tenho poucos serviços REST assíncronos que não são dependentes um do outro. Ou seja, enquanto "aguarda" uma resposta do Service1, posso chamar Service2, Service3 e assim por diante.
Por exemplo, consulte o código abaixo:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Agora, service2Responsenão depende service1Responsee eles podem ser buscados independentemente. Portanto, não há necessidade de aguardar a resposta do primeiro serviço para chamar o segundo serviço.
Eu não acho que posso usar Parallel.ForEachaqui, pois não é uma operação vinculada à CPU.
Para chamar essas duas operações em paralelo, posso chamar use Task.WhenAll? Um problema que vejo usando Task.WhenAllé que ele não retorna resultados. Para buscar o resultado, posso ligar task.Resultdepois de ligar Task.WhenAll, pois todas as tarefas já estão concluídas e tudo o que preciso para nos buscar uma resposta?
Código de amostra:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
Esse código é melhor que o primeiro em termos de desempenho? Alguma outra abordagem que eu possa usar?
Parallel.ForEachgeraria novos threads, enquanto async awaitfaria tudo em um único thread.
await) antes de estar pronta.
WhenAllantes de Resultconcluir a ideia de que ele conclui todas as tarefas antes de .Result ser chamado. Como o Task.Result bloqueia o segmento de chamada, presumo que, se eu chamá-lo após a conclusão das tarefas, retornará o resultado imediatamente. Eu quero validar o entendimento.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation- Eu não vejo a lógica lá. Simultaneidade é simultaneidade.