我有以下示例程序:
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
,然后休眠一秒钟,在此时间t2
将值设置为3
,然后t1
将其更改回2
。
这是附加调试器时发生的行为(在 Visual Studio 中按 F5)。但是,当我在没有附加调试器的情况下运行该程序(Visual Studio 中的 Ctrl + F5)时,输出为3
.
为什么?