Почему объект Task не использует передаваемый ему параметр?

я используюTask чтобы обрабатывать несколько запросов параллельно и передавать разные параметры каждой задаче, но кажется, что все задачи принимают один последний параметр и выполняют метод, используя его.

Ниже приведен пример кода. Я ожидал выхода как:

0 1 2 3 4 5 6 ..99

но я получаю:

100 100 100 ..10.

Может быть, перед вызовом метода печати,iзначение уже100 но не должен ли каждый метод печатать передаваемый ему параметр? Почему бы метод печати принимает окончательное значение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);
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос