2

次のようなスレッドを作成します。

static void Main(string[] args)
{            

    Thread tr2 = new Thread(() =>
    {
        int a = 0;

        Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
    });


    tr2.Start();

    Console.ReadKey();
}

しかし、tr2は開始されず、 method の後に開始され、この最初の行をmethodReadKey()に追加すると、 method の前に開始されます。Maintr2ReadKey()

static void Main(string[] args)
{
    Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);



    Thread tr2 = new Thread(() =>
    {
        int a = 0;

        Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
    });



    tr2.Start();

    Console.ReadKey();
}

障害はどこですか?

4

3 に答える 3

2

Console.ReadKey()と呼ばれる Console クラスの内部オブジェクトのロックを取得しますConsole.InternalSyncObject

つまりConsole.WriteLine、ロックが解除されるのを待ってから実行することを意味します。ご想像のとおり、キーを押すたびにロックが解除されます。

于 2013-06-04T20:22:35.970 に答える