Tengo pocos servicios REST asíncronos que no dependen unos de otros. Es decir, mientras "espero" una respuesta del Servicio1, puedo llamar al Servicio2, al Servicio3, etc.
Por ejemplo, consulte el siguiente código:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Ahora, service2Response
no depende service1Response
y se pueden obtener de forma independiente. Por lo tanto, no es necesario que espere la respuesta del primer servicio para llamar al segundo servicio.
No creo que pueda usar Parallel.ForEach
aquí, ya que no es una operación vinculada a la CPU.
Para llamar a estas dos operaciones en paralelo, ¿puedo llamar al uso Task.WhenAll
? Un problema que veo usando Task.WhenAll
es que no devuelve resultados. Para obtener el resultado, ¿puedo llamar task.Result
después de llamar Task.WhenAll
, ya que todas las tareas ya se han completado y todo lo que necesito para obtener una respuesta?
Código de muestra:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
¿Es este código mejor que el primero en términos de rendimiento? ¿Algún otro enfoque que pueda usar?
Parallel.ForEach
generaría nuevos hilos mientras async await
que haría todo en un solo hilo.
await
) antes de que esté listo.
WhenAll
antes de hacerlo Result
con la idea de que completa todas las tareas antes de que se llame a .Result. Dado que Task.Result bloquea el hilo de llamada, supongo que si lo llamo después de que las tareas se hayan completado, devolverá el resultado inmediatamente. Quiero validar la comprensión.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation
- No veo la lógica allí. La concurrencia es concurrencia.