Por que o objeto Task não usaria o parâmetro passado para ele?
estou a usarTask
para processar múltiplas solicitações em paralelo e passar um parâmetro diferente para cada tarefa, mas parece que todas as tarefas pegam um parâmetro final e executam o método usando isso.
Abaixo está o código de exemplo. Eu estava esperando a saída como:
0 1 2 3 4 5 6 ..99
mas eu recebo:
100 100 100 ..10.
Pode ser antes que o método de impressão seja chamado,i
O valor já é100
mas não deve cada método imprimir o parâmetro passado para ele? Por que método de impressão leva o valor final dei
?
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);
}
}