using BotSharp.Plugin.Twilio.Models; using System.Threading.Channels; namespace BotSharp.Plugin.Twilio.Services { public class TwilioMessageQueue { private readonly Channel _queue; internal ChannelReader Reader => _queue.Reader; public TwilioMessageQueue() { BoundedChannelOptions options = new(100) { FullMode = BoundedChannelFullMode.Wait }; _queue = Channel.CreateBounded(options); } public async ValueTask EnqueueAsync(CallerMessage request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } Console.WriteLine($"[{DateTime.UtcNow}] Enqueue {request}"); await _queue.Writer.WriteAsync(request); } internal void Stop() { Console.WriteLine($"[{DateTime.UtcNow}] Complete queue"); _queue.Writer.TryComplete(); } } }