Закрываемые и захваченные переменные в потоках C # - PullRequest
0 голосов
/ 02 июня 2018

Рассмотрим код:

using System;
using System.Threading;

class ThreadTest
{
    static void Main()
    {
        for(int i = 0; i < 10; i ++)
        {
            int tmp = i;
            new Thread(() => Test(tmp)).Start();
        }
    }

    static void Test(int i)
    {
        Console.WriteLine("=== Test " + i);
    }
}

Фактический выход :

=== Test 0
=== Test 6
=== Test 3
=== Test 5
=== Test 8
=== Test 9
=== Test 2
=== Test 4
=== Test 7
=== Test 1

Мой исключенный вывод должен выглядеть следующим образом:

=== Test 0
=== Test 1
=== Test 2
=== Test 3
=== Test 4
=== Test 5
=== Test 6
=== Test 7
=== Test 8
=== Test 9

Таким образом, как вы можете видеть выше, результат превосходит мои ожидания; что я должен изменить код, чтобы он работал так, как я его исключал?Я очень смущен ...

...