次のサンプルプログラムがあります。
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
がわかり、次に値を に設定してから に戻すまで1
1 秒間スリープします。t2
3
t1
2
これは、デバッガーがアタッチされている (Visual Studio で F5 キーを押す) ときに発生する動作です。ただし、デバッガーを接続せずにこのプログラムを実行すると (Visual Studio で Ctrl + F5)、出力は3
.
なんで?