通过EventWaitHandle同步无法按预期工作

时间:2014-06-08 11:06:55

标签: c# .net task-parallel-library event-wait-handle

所以基本上这就是我正在测试的代码

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.我在这里做错了吗?请不要问为什么我使用线程池而不是任务。它仅用于测试目的。

1 个答案:

答案 0 :(得分:3)

更改“result2”变量的唯一代码行是var result2 = 15;。之后,当您递增result2变量时,result仍为15。

P.S。很好的说明为什么你不应该把你的变量命名为“result2”或“variable4”。