ci / build-test (push) Canceled after 0s
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 зелёные.
24 lines
885 B
C#
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();
|
|
}
|