2017-03-17 11 views
0

シーケンシャルタスクは出力をロックする場合でも同じ出力を返します。 clouserの変数もありません。 例シーケンシャルタスクで異なる出力を設定する方法

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の値をキャプチャしてみてください:

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()); 
関連する問題