2014-11-10 38 views
6

'dan alınıyor Burada oldukça basit bir tane var. Her biri aramak ve değerlerini toplamak istediğim bir async yöntemine sahip bir nesne koleksiyonum var. Paralel koşmasını istiyorum. Başarı olmadan bu yazı çeşitli yollar denedimGeri dönüş değerleri, Task.WhenAll

IEnumerable<TestResult> results = await Task.WhenAll(myCollection.Select(v => v.TestAsync())); 

: Ne İsterdim ulaşmak için bir kod kırık hattında özetlenebilir. Düşüncesi olan var mı?

+1

Nasıl 'bakmak TestAsync' kapsamaz:

public class Test { public async Task<TestResult> TestAsync() { await Task.Delay(1000); // Imagine an I/O operation. return new TestResult(); } } 

Biz bu sonuçları elde? – i3arnon

+2

Bu kod satırı iyi görünüyor. Tam olarak ne çalışmıyor? Herhangi bir derleyici hatası, çalışma zamanı istisnası, vb? – Dennis

+0

Sanırım onun TestAsync() imzası şöyle görünüyordu: "public async TestResult TestAsync()", public async Task TestAsync() 'yerine. –

cevap

9

Beklediğiniz görevlerin aynı tür sonucu varsa, Task.WhenAll bir dizi döndürür. Bu sınıf için Örnek:

var myCollection = new List<Test>(); 
myCollection.Add(new Test()); 

IEnumerable<TestResult> results = await Task.WhenAll(myCollection.Select(v => v.TestAsync())); 
+3

@ I3arnon: Bu, OP'nin yazdığı aynı koddur. Netleştirmek daha iyidir, onun için neyin işe yaramadığı. – Dennis

+0

Neyin işe yarayıp neyin işe yaramadığını açıkladım. OP'nin onun için neyin işe yaramadığını açıklamasını bekliyorum. – i3arnon

+3

Ben bir aptalım - TestAsync yöntemim Görev yerine bir Görev döndürüyordu - değiştirdiğimde, işe yaradı. Beni doğru yöne işaret ettiğin için teşekkürler - Önümde yanımda olmasına rağmen neyin yanlış olduğunu göremedim! – wwarby

İlgili konular