Вы видите 100
распечатку почти для каждого запуска, потому что i
в следующей строке эквивалентно 100 к моменту запуска задач:
int j = 0 + i;
Я полагаю, что вы пытаетесь решить эту проблему с помощью строки int j = 0 + i
, но, поскольку i
- это то, что меняется, j
все равно всегда будет эквивалентно тому, что i
будет при запуске задачи. , Если вы назначите значение i
для j
вне вашей задачи, эта проблема не появится:
int j = i;
taskArray.Add(Task.Factory.StartNew((Object obj) => {
cb.Add(j);
Console.WriteLine("Task #{0} created on {1}",
j, Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(10);
}, , i));
Не уверен, что я проделал большую работу, объясняя это, но я надеюсь, что это поможет.