-1

所以基本上这是我一直在测试的代码

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

4

1 回答 1

3

更改“result2”变量的唯一代码行是var result2 = 15;. 之后,result2在您增加result变量时保持 15。

PS 很好的说明为什么你不应该将你的变量命名为“result2”或“variable4”。

于 2014-06-08T11:13:50.760 回答