У мене є кілька служб async REST, які не залежать один від одного. Тобто під час "очікування" відповіді від Service1 я можу зателефонувати до Service2, Service3 тощо.
Наприклад, зверніться до коду нижче:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Тепер service2Responseце не залежить від їх, service1Responseі їх можна отримати самостійно. Отже, немає потреби чекати відповіді першої служби, щоб зателефонувати на другу службу.
Я не думаю, що я можу Parallel.ForEachтут використовувати, оскільки це не пов'язана з процесором операція.
Для того, щоб викликати ці дві операції паралельно, чи можу я зателефонувати на використання 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ідеєю, що вона виконує всі завдання раніше. Оскільки Task.Result блокує викликову нитку, я припускаю, що якщо я викличу її після того, як завдання фактично виконані, він негайно поверне результат. Я хочу підтвердити розуміння.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation- Я не бачу логіки там. Паралельність - це паралельність.