Как запускать периодические задачи без дрейфа и гонок?
Используйте PeriodicTimer (.NET 6+) или цикл с Stopwatch и компенсацией дрейфа; исключайте реэнтрантность через SemaphoreSlim (single-flight); прокидывайте CancellationToken, пропускайте тик, если прошлый ещё идёт, и логируйте задержки.
Библиотека собеса по С#
Библиотека собеса по С#