2013-02-05 29 views
2
Task<string> RunList(int client) 
{ 
    return pages[client]; 
} 

private async void Form1_DoubleClick(object sender, EventArgs e) 
{ 
    for (int x = 0; x < listBox1.Items.Count; x++) 
    { 
     RunList(x); 
    } 
} 

這將通過任務循環飛行,但是如何知道在不影響循環速度的情況下全部結果何時完成?不減慢任務循環,並知道返回結果的時間

+0

任何等待或.Wait()會減慢它的抓取速度,一次只做1頁,在那裏我正在尋找所有它們開始,然後在計算所有結果時通知它們。錯誤,我應該能夠照顧..可能需要一些幫助與聚合錯誤雖然,我一直呆在那裏一次也.. ..(InnerExceptions?) – nobodies

回答

5

你可以awaitWhenAll的結果進行確認,以確保所有的任務都已經在代碼中完成了。 (重要的是不要在這裏使用WaitAll,這將阻止用戶界面線程。)

private async void Form1_DoubleClick(object sender, EventArgs e) 
{ 
    var tasks = new List<Task<string>>(); 
    for (int x = 0; x < listBox1.Items.Count; x++) 
    { 
     tasks.Add(RunList(x)); 
    } 
    await Task.WhenAll(tasks); 
} 

這裏的基本思想是要求他們await之前只需啓動的任務。這裏只有兩個任務的簡單的例子:

await Task.Delay(1000); 
await Task.Delay(1000); 

這將執行第一個任務和然後第二個任務。

var task1 = Task.Delay(1000); 
var task2 = Task.Delay(1000); 

await task1; 
await task2; 

這將啓動兩個任務,然後在兩個任務完成後繼續,允許然後同時運行。

+0

+1不阻止。 –

+0

這似乎只是運行列表'x'時間的最後一個項目,爲什麼會這樣呢? – nobodies

+0

@nobodies這將是您的'RunList'方法的問題。由於我們不知道它是如何實施的,我們無法真正說出。 – Servy