У меня есть несколько асинхронных служб REST, которые не зависят друг от друга. То есть, пока «ожидая» ответа от Service1, я могу позвонить в Service2, Service3 и так далее.
Например, смотрите ниже код:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Теперь service2Responseне зависит, service1Responseи они могут быть получены независимо. Следовательно, мне не нужно ждать ответа первой службы для вызова второй службы.
Я не думаю, что я могу использовать Parallel.ForEachздесь, поскольку это не связано с процессором операции.
Можно ли вызвать эти две операции параллельно, могу ли я вызвать use Task.WhenAll? Одна проблема, которую я вижу, Task.WhenAllэто то, что она не возвращает результаты. Чтобы получить результат, я могу позвонить task.Resultпосле вызова Task.WhenAll, так как все задачи уже выполнены, и все, что мне нужно, чтобы получить нам ответ?
Образец кода:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
Этот код лучше, чем первый, с точки зрения производительности? Любой другой подход, который я могу использовать?
Parallel.ForEachбудут порождаться новые потоки, тогда как async awaitвсе будет выполняться в одном потоке.
await), прежде чем он будет готов.
WhenAllперед тем, как делаю Resultмысль, что он завершает все задачи перед вызовом .Result. Поскольку Task.Result блокирует вызывающий поток, я предполагаю, что если я вызову его после фактического завершения задач, он немедленно вернет результат. Я хочу подтвердить понимание.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation- Я не вижу логики там. Параллелизм - это параллелизм.