Работа с многопоточностью.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);
Ссылка на вики репозиторий
Ссылка на вики репозиторий