Синхронизация через EventWaitHandle не работает должным образом

Так что в основном это код, который я тестировал

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 ответ

Решение

Единственная строка кода, которая изменяет вашу переменную "result2" var result2 = 15;, После этого, result2 остается 15, пока вы увеличиваете свой result переменная.

PS Отличная иллюстрация, почему вы не должны называть свои переменные как "result2" или "variable4".

Другие вопросы по тегам