namespace Deal.Modules.Pipeline.Application.Services; /// /// Single-flight-замок ручной переклассификации /// public sealed class ReclassifyGate : IDisposable { private readonly SemaphoreSlim _gate = new(initialCount: 1, maxCount: 1); /// /// Пытается войти в критическую секцию без ожидания. /// /// True — вход получен (вызывающий обязан вызвать ); false — проход уже идёт. public bool TryEnter() => _gate.Wait(0); /// /// Освобождает вход после завершения прохода. /// public void Exit() => _gate.Release(); /// public void Dispose() => _gate.Dispose(); }