2017-07-12 15 views
-1

我運行下面的簡化代碼:行爲與參數的新工作是不是在C#中的預期一個

public static void runCode(int num){ 
    Console.WriteLine("Task {0}",num); 
    for(int j=0;j<10;j++) 
    Console.Write(num); 
} 

public static void Main(string[] args){ 
    // some operations here 
    for(int i=0;i<numIterations;i++){ 
    Console.WriteLine("Current number={0}",i); 
    Task.Run(()=>runCode(i)); 
    } 
    // remaining code 
} 

結果是以下之一:

Current number=0 
Current number=1 
Current number=2 
Current number=3 
Task 4 
4444444444Task 4 
4444444444Task 4 
4444444444Task 4 
4444444444 

爲什麼所示數量總是一樣的?也許對於靜態

+1

通過'runCode(我)'這些其他線程運行,你的循環已經完成的時間,和值我是4.這也是一個multiultidupe,但我不能找到規範。 – Will

回答

0

Here是對這種行爲的解釋,這就是你如何解決它:

public static void runCode(int num) 
{ 
    Console.WriteLine("Task {0}", num); 
    for (int j = 0; j < 10; j++) 
     Console.Write(num); 
} 

public static void Main(string[] args) 
{ 
    // some operations here 
    for (int i = 0; i < 10; i++) 
    { 
     Console.WriteLine("Current number={0}", i); 
     var x = i; 
     Task.Run(() => runCode(x)); 
    } 
    // remaining code 
} 
+0

非常感謝!我也試過類似的解決方案,但是我把i1的聲明放在for循環之外,所以結果和以前一樣。謝謝! – aegon

相關問題