Вы создаете отдельный поток для ожидания ... но код после оператора, который вы дали, будет продолжаться, потому что вы не ожидаете в этом потоке.Другими словами, вы создаете три потока:
- Поток X: создает потоки A и B, затем ожидает их завершения
- Поток A: получает PriceA и затем устанавливает waitHandle[0]
- Поток B: получает PriceB и затем устанавливает waitHandle [1]
Но поток X ничего не делает после он ожидает, так какой смысложидания внутри него?
Кроме того, было бы намного проще просто вызвать Join
на дополнительных потоках, которые вы создали.На самом деле, если вам нужно только подождать в «текущем» потоке, вам нужен только один дополнительный поток в первую очередь:
Thread t = new Thread(() => { PriceA = _service.GetPriceA(); });
t.Start();
PriceB = _service.GetPriceB();
t.Join();
// Other code
к тому времени, когда вы достигнете другого кода", PriceA и PriceB будут установлены.Конечно, в нем отсутствует значительная часть обработки ошибок ... но это легче добавить, когда у вас есть более простая отправная точка, чем ваш в настоящее время слишком сложный код.