Files
Deal/src/core/Deal.Modules.Pipeline/Application/Services/ReclassifyGate.cs
T
Rustam Khalimov 27c7831910
ci / build-test (push) Canceled after 0s
Deal — единая кодовая база
SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/
Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue,
контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер),
Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог).

Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0,
тесты 1340/130/52/38/9 зелёные.
2026-09-11 23:56:47 +03:00

24 lines
885 B
C#

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