Why would Task object not use parameter passed to it?
c#, task
Solution
You're a victim of a closure. A simplest fix to this issue is:
for (int i = 0; i < 100; i++)
{
int v = i;
t[i] = Task.Factory.StartNew(() => print(v));
}
You can find more detailed explanations here and here.
Problem
I'm using `Task` to process multiple requests in parallel and passing a different parameter to each task but it seems all the tasks takes one final parameter and execute the method using that. Below is the sample code. I was expecting output as: 0 1 2 3 4 5 6 ..99 but I get: 100 100 100 ..10 . May be before print method is called, `i`'s value is already `100` but shouldn't each method print the parameter passed to it? Why would print method takes the final value of `i`? ``` class Program { static void Main(string[] args) { Task[]t = new Task[100]; for (int i = 0; i < 100; i++) { t[i] = Task.Factory.StartNew(() => print(i)); } Task.WaitAll(t); Console.WriteLine("complete"); Console.ReadLine(); } private static void print(object i) { Console.WriteLine((int)i); } } ```