using System.Collections.Concurrent; using System.Threading.Channels; namespace Sphagnum.Common.Services { internal class ChannelsPool { private readonly int _poolSize; public ChannelsPool(int poolSize) { _poolSize = poolSize; } private readonly ConcurrentQueue> channels = new ConcurrentQueue>(); public Channel Get() { if (channels.TryDequeue(out var channel)) { return channel; } else { return Channel.CreateBounded(1); } } public void Return(Channel channel) { if (channels.Count < _poolSize) { channels.Enqueue(channel); } } } }