Birbirine bağımlı olmayan birkaç zaman uyumsuz REST hizmetim var. Bu Service1 bir yanıt "bekliyor" iken, ben Service2, Service3 ve benzeri arayabilirsiniz.
Örneğin, aşağıdaki koda bakın:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Şimdi, service2Response
bağımlı değildir service1Response
ve bağımsız olarak getirilebilirler. Bu nedenle, ikinci hizmeti çağırmak için ilk hizmetin yanıtını beklememe gerek yok.
Parallel.ForEach
CPU bağlı çalışma olmadığı için burada kullanabileceğimi sanmıyorum .
Bu iki işlemi paralel olarak çağırmak için kullanımı arayabilir miyim Task.WhenAll
? Kullanırken gördüğüm bir sorun Task.WhenAll
, sonuç döndürmüyor olmasıdır. Sonucu almak için , tüm görevler zaten tamamlandığından ve bize yanıt almak için ihtiyacım olduğu için task.Result
aradıktan sonra arayabilir Task.WhenAll
miyim?
Basit kod:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
Bu kod performans açısından ilk koddan daha mı iyi? Kullanabileceğim başka bir yaklaşım var mı?
Parallel.ForEach
yeni iş parçacıkları ortaya çıkarken, async await
her şeyi tek bir iş parçacığı üzerinde yapacak olmasıdır.
await
hazır olmadan önce yanıt ( ) kullanmaya çalıştığında mantıksal olarak engellenir .
WhenAll
benden önce Result
.Result çağrılmadan önce tüm görevleri tamamlar fikrine sahip. Task.Result çağıran evreyi engellediğinden, görevler tamamlandıktan sonra çağırırsam sonuçların hemen döneceğini varsayıyorum. Anlayışı doğrulamak istiyorum.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation
- Orada mantığı görmüyorum. Eşzamanlılık eşzamanlılıktır.