2017-03-17 42 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()); 
相关问题