Warum sollte das Task-Objekt keine Parameter verwenden, die an es übergeben wurden?

Ich benutzeTask mehrere Anforderungen parallel zu verarbeiten und jeder Aufgabe einen anderen Parameter zuzuweisen, aber es scheint, dass alle Aufgaben einen letzten Parameter benötigen und die Methode damit ausführen.

Unten ist der Beispielcode. Ich habe Ausgabe erwartet als:

0 1 2 3 4 5 6 ..99

aber ich bekomme:

100 100 100 ..10.

Kann sein, bevor die Druckmethode aufgerufen wird,iist schon wert100 Aber sollte nicht jede Methode den übergebenen Parameter ausgeben? Warum sollte die Druckmethode den Endwert von annehmen?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);
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage