Работа с многопоточностью.md
Работа с многопоточностью
Весь инструментарий, отвечающий за работу с многопоточностью, собран в пространстве имён Atom.Threading.
Доступные классы:
Название | Описание |
---|---|
Wait | Различные механизмы ожиданий |
Ожидания
Ожидание выполнения условия
Для ожидания выполнения условия, в классе Wait есть метод-обёртка Wait.Until
над SpinWait.WaitUntil, реализующая те же возможности, но позволяющая управлять интервалом вращения спина для корелляции нагрузки на ЦП. Логика использования такая же, ожидание будет выполняться до тех пор, пока условие в делегате возвращает true
и пока не истечёт таймаут.
Пример использования:
var currentValue = 5; // Изменяется другими потоками/обработчиками извне.
var maxValue = 50;
var interval = TimeSpan.FromMilliseconds(50); // Интервал срабатывания внутреннего SpinWait.
var timeout = TimeSpan.FromSeconds(30); // Максимальное время ожидания.
Wait.Until(() => currentValue < maxValue, interval, timeout);
Так же, есть асинхронная перегрузка метода ожидания, не блокирующая поток:
var currentValue = 5; // Изменяется другими потоками/обработчиками извне.
var maxValue = 50;
var interval = TimeSpan.FromMilliseconds(50); // Интервал срабатывания внутреннего SpinWait.
var timeout = TimeSpan.FromSeconds(30); // Максимальное время ожидания.
await Wait.UntilAsync(() => currentValue < maxValue, interval, timeout).ConfigureAwait(false);