所以基本上这就是我正在测试的代码
static void Main(string[] args)
{
var result = 0;
EventWaitHandle calcDone = new EventWaitHandle(false, EventResetMode.ManualReset);
ThreadPool.QueueUserWorkItem((x) => { result += GetNumer(); calcDone.Set(); });
var result2 = 15;
calcDone.WaitOne();
result += result2;
Console.WriteLine(result2);
}
static int GetNumer()
{
Thread.Sleep(2000);
return 2000;
}
所以基本上你会期望在控制台窗口中编写2015,但不会,只输出15。 WaitOne
工作正常,因为在GetNumber
返回并递增结果之前,执行会停止,但之后我不知道会发生什么。如果您只是调试代码并逐步完成一切正常,但如果您只运行代码则输出15.我在这里做错了吗?请不要问为什么我使用线程池而不是任务。它仅用于测试目的。
答案 0 :(得分:3)
更改“result2”变量的唯一代码行是var result2 = 15;
。之后,当您递增result2
变量时,result
仍为15。
P.S。很好的说明为什么你不应该把你的变量命名为“result2”或“variable4”。