diff --git a/Ragon/Sources/Server/Http/WebSocketTaskScheduler.cs b/Ragon/Sources/Server/Http/WebSocketTaskScheduler.cs index 9a92db7..67d9708 100644 --- a/Ragon/Sources/Server/Http/WebSocketTaskScheduler.cs +++ b/Ragon/Sources/Server/Http/WebSocketTaskScheduler.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Threading.Channels; using System.Threading.Tasks; +using NLog.LayoutRenderers.Wrappers; namespace Ragon.Core; @@ -9,13 +10,14 @@ public class WebSocketTaskScheduler: TaskScheduler { private ChannelReader _reader; private ChannelWriter _writer; - private Channel _channel; - + private Queue _pendingTasks; + public WebSocketTaskScheduler() { - _channel = Channel.CreateUnbounded(); - _reader = _channel.Reader; - _writer = _channel.Writer; + var channel = Channel.CreateUnbounded(); + _pendingTasks = new Queue(); + _reader = channel.Reader; + _writer = channel.Writer; } protected override IEnumerable? GetScheduledTasks() @@ -40,7 +42,10 @@ public class WebSocketTaskScheduler: TaskScheduler TryExecuteTask(task); if (task.Status != TaskStatus.RanToCompletion) - _writer.TryWrite(task); + _pendingTasks.Enqueue(task); } + + while (_pendingTasks.TryDequeue(out var task)) + _writer.TryWrite(task); } } \ No newline at end of file