Синхронизация через 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".