Saya memiliki beberapa layanan REST async yang tidak saling bergantung. Itu sementara "menunggu" respons dari Service1, saya dapat memanggil Service2, Service3 dan sebagainya.
Misalnya, lihat kode di bawah ini:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Sekarang, service2Response
tidak bergantung pada service1Response
dan mereka dapat diambil secara mandiri. Oleh karena itu, tidak perlu bagi saya untuk menunggu tanggapan dari layanan pertama untuk memanggil layanan kedua.
Saya tidak berpikir saya bisa menggunakan di Parallel.ForEach
sini karena ini bukan operasi terikat CPU.
Untuk memanggil kedua operasi ini secara paralel, dapatkah saya memanggil penggunaan Task.WhenAll
? Satu masalah yang saya lihat Task.WhenAll
adalah tidak mengembalikan hasil. Untuk mengambil hasilnya, bisakah saya menelepon task.Result
setelah menelepon Task.WhenAll
, karena semua tugas sudah selesai dan semua yang saya butuhkan untuk menjemput kami?
Kode sampel:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
Apakah kode ini lebih baik daripada yang pertama dalam hal kinerja? Adakah pendekatan lain yang bisa saya gunakan?
Parallel.ForEach
akan menelurkan utas baru sedangkan async await
akan melakukan segalanya pada satu utas.
await
) sebelum siap.
WhenAll
sebelum saya lakukan Result
dengan gagasan bahwa ia menyelesaikan semua tugas sebelumnya. Hasilnya disebut. Karena, Task.Result memblokir utas panggilan, saya menganggap bahwa jika saya memanggilnya setelah tugas-tugas benar-benar selesai, ia akan segera mengembalikan hasil. Saya ingin memvalidasi pemahaman.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation
- Saya tidak melihat logika di sana. Konkurensi adalah konkurensi.