Я реализую компонент управления потоком, который ограничивает максимальное количество запросов. Каждый рабочий поток может отправлять либо один запрос, либо пакет запросов, но в любое время общее количество ожидающих запросов не должно превышать максимальное количество.
Я изначально хочу реализовать с помощью SemaphoreSlim:
инициализация семафора для максимального числа запросов, затем, когда рабочий поток собирается вызывать службу, он должен получить достаточное количество токенов, однако я обнаружил, что на самом деле SemaphoreSlim и Semaphore позволяют только потоку уменьшить количество семафоров на 1, в моем случае я хотите уменьшить количество на количество запросов, которые несет рабочий поток.
Какой примитив синхронизации я должен использовать здесь?
Просто для пояснения, служба поддерживает пакетную обработку, поэтому один поток может отправить N запросов за один вызов службы, но, соответственно, он должен иметь возможность уменьшить текущее число семафоров на N.