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,i
ist 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);
}
}