Я хотел бы создать некоторый метод, который будет использоваться в общем виде, если бы он блокировал (если не истекает определенный тайм-аут) до тех пор, пока не будет выполнено заданное условие.Лучший способ «блокировать» до тех пор, пока не будет выполнено определенное условие.
Использование в коде будет что-то похожее на:
WaitUntil(condition);
Я попытался его реализации с использованием While (..) петли, однако это выглядит излишеством.
В текущей реализации я инициализирую «одноразовый» таймер, срок действия которого истекает в TIMEOUT. Я запускаю цикл while и проверяю, был ли таймер отключен или нет, выбрасывая исключение, если он это сделал.
Существуют ли простые, но эффективные методы для реализации такого метода?
Я бы рассмотрел делегаты и события – Joe
Мьютекс, Семафор, ManualResetEvent, AutoResetEvent, CountdownEvent и т. Д. Посмотрите на пространство имен System.Threading –
Говоря более технически, вы хотите что-то синхронизировать. Операционная система предоставляет механизмы, которые позволяют избежать ожидания в цикле while. Yoy имеет несколько вариантов: семафор, критический раздел, событие ручного/автоматического сброса и многое другое. Чтобы выбрать один, вы должны сказать, какое условие вы ожидаете. Одной из общих функций для синхронизации является WaitForSingleObject. – pkmiec