Files
satellite-provider/SatelliteProvider.Services/RegionRequestQueue.cs
T
2025-10-28 15:56:16 +01:00

40 lines
1.1 KiB
C#

using System.Threading.Channels;
using SatelliteProvider.Common.DTO;
using SatelliteProvider.Common.Interfaces;
namespace SatelliteProvider.Services;
public class RegionRequestQueue : IRegionRequestQueue
{
private readonly Channel<RegionRequest> _queue;
public RegionRequestQueue(int capacity)
{
var options = new BoundedChannelOptions(capacity)
{
FullMode = BoundedChannelFullMode.Wait
};
_queue = Channel.CreateBounded<RegionRequest>(options);
}
public async ValueTask EnqueueAsync(RegionRequest request, CancellationToken cancellationToken = default)
{
await _queue.Writer.WriteAsync(request, cancellationToken);
}
public async ValueTask<RegionRequest?> DequeueAsync(CancellationToken cancellationToken = default)
{
if (await _queue.Reader.WaitToReadAsync(cancellationToken))
{
if (_queue.Reader.TryRead(out var request))
{
return request;
}
}
return null;
}
public int Count => _queue.Reader.Count;
}