.NET 4.0: Пожалуйста, помогите мне с этой задачей.

Простое копирование пасты здесь:

static void Main(string[] args)
{
    List<Task> Tasks = new List<Task>();

    Random r = new Random();

    for (int o = 0; o < 5; o++)
        Tasks.Add(Task.Factory.StartNew(() => { int i = r.Next(0, 3000); Thread.Sleep(i); Console.WriteLine("{0}: {1}", o, i); }));

    Task.WaitAll(Tasks.ToArray());

    Console.Read();
}

Когда вы запустите это, вы получите что-то вроде этого:

5: 98
5: 198
5: 658
5: 1149
5: 1300

What am Я не понимаю этого? Запись каждой итерации o отображается как 5 для всех потоков, когда я ожидал увидеть числа от 0 до 4 в случайном порядке.

Я попытался использовать реальный метод вместо анонимный, и он делает то же самое. Что мне не хватает?

Редактировать: Я только что обнаружил проблему с моим самым первым сообщением и отредактировал вопрос, извините, если вы ответили о проблеме неправильного порядка. Однако мне любопытно, как почему o пишет неправильно.

0
задан oscilatingcretin 23 October 2011 в 03:21
поделиться