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, service2Responsebağımlı değildir service1Responseve bağımsız olarak getirilebilirler. Bu nedenle, ikinci hizmeti çağırmak için ilk hizmetin yanıtını beklememe gerek yok.
Parallel.ForEachCPU 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.Resultaradıktan sonra arayabilir Task.WhenAllmiyim?
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.ForEachyeni iş parçacıkları ortaya çıkarken, async awaither şeyi tek bir iş parçacığı üzerinde yapacak olmasıdır.
awaithazır olmadan önce yanıt ( ) kullanmaya çalıştığında mantıksal olarak engellenir .
WhenAllbenden ö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.