2

次のサンプルプログラムがあります。

using System;
using System.Threading;
using System.Threading.Tasks;

namespace StackoverflowExample
{
    class Program
    {
        static int value = 1;
        static void Main(string[] args)
        {
            Task t1 = Task.Run(() =>
            {
                if (value == 1)
                {
                    Thread.Sleep(1000);
                    value = 2;
                }
            });

            Task t2 = Task.Run(() =>
            {
                value = 3;
            });

            Task.WaitAll(t1, t2);
            Console.WriteLine(value);
            Console.ReadLine();
        }
    }
}

このコードが出力することを期待します2。値が であることt1がわかり、次に値を に設定してから に戻すまで11 秒間スリープします。t23t12

これは、デバッガーがアタッチされている (Visual Studio で F5 キーを押す) ときに発生する動作です。ただし、デバッガーを接続せずにこのプログラムを実行すると (Visual Studio で Ctrl + F5)、出力は3.

なんで?

4

3 に答える 3