namespace FiscalOS.Infra.Queuing; internal class ChannelAsyncQueue : IAsyncQueue { private readonly Channel _channel = Channel.CreateUnbounded(); private ChannelAsyncQueue() { } public static ChannelAsyncQueue From(IServiceProvider serviceProvider) { return new(); } public async Task EnqueueAsync(T item, CancellationToken cancellationToken = default) { await _channel.Writer.WriteAsync(item, cancellationToken).ConfigureAwait(false); } public async Task DequeueAsync(CancellationToken cancellationToken = default) { return await _channel.Reader.ReadAsync(cancellationToken).ConfigureAwait(false); } public async ValueTask DisposeAsync() { _channel.Writer.Complete(); await _channel.Reader.Completion.ConfigureAwait(false); } }