2017-04-24 169 views
-1

我嘗試使用多線程任務和這裏(任務)是我遇到的怪胎:這兩段代碼爲什麼返回不同的結果

tasks[0] = Task.Run(() => SumNumbers(0, end)); 
tasks[1] = Task.Run(() => SumNumbers(1, end)); 

for (int i = 0; i <= 1; i++) 
{ 
    tasks[i] = Task.Run(() => SumNumbers(i, end)); 
} 

前兩行返回正確的結果,而循環解決方案沒有。有沒有解釋呢?

+1

的問題沒有正確問,但我懷疑你需要我分配到一個臨時變量,然後用它SumNumber功能,否則它會用I = 2的兩倍 – MistyK

+3

這是一個封閉的問題。該'i'傳遞給雙方會因此更新爲2相同,您需要先將它指定一個局部變量並使用它。 – juharr

+0

謝謝你的回答,修復它,但我還是不明白,爲什麼出現這種情況。我不應該在第一次迭代時將i = 0傳遞給方法,而在第二次迭代中i = 1? – John

回答

0

因爲你的任務在另一個線程和當前線程開始想等待和增加計數器,因爲你已經創建委託使用原始的櫃檯,因爲計數做得比創建一個新的任務快得多。

You can get more help here.

相關問題