2017-03-17 17 views
0

順序任務返回相同的輸出,甚至鎖定輸出。即使沒有陰影變數。 例如如何在順序任務中設置不同的輸出

List<Task> tasks = new List<Task>(); 
for (int i = 0; i < 10; i++) 
{ 
    Task t = Task.Factory.StartNew((arg) => 
     { 
      int taskid = (int)i; 
      IteratingFunction(taskid); 
     }, i); 
    tasks.Add(t); 
} 
Task.WaitAll(tasks.ToArray()); 

,並且該方法是

public void IteratingFunction(int s) 
{ 
    lock (Console.Out) 
    { 
     Console.WriteLine("Running task is: {0}",s); 
    } 
} 

回答

2

要訪問的改性閉合,嘗試捕獲x的值lambda函數以外:

List<Task> tasks = new List<Task>(); 
for (int i = 0; i < 10; i++) 
{ 
    // capture taskid here 
    int taskid = (int)i; 
    Task t = Task.Factory.StartNew((arg) => 
    { 
     IteratingFunction(taskid); 
    }, i); 
    tasks.Add(t); 
} 
Task.WaitAll(tasks.ToArray());