fixed: temporary scheduler

This commit is contained in:
2022-10-22 22:58:15 +04:00
parent b7e8327ca8
commit 14ae5e8189
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Channels; using System.Threading.Channels;
using System.Threading.Tasks; using System.Threading.Tasks;
using NLog.LayoutRenderers.Wrappers;
namespace Ragon.Core; namespace Ragon.Core;
@@ -9,13 +10,14 @@ public class WebSocketTaskScheduler: TaskScheduler
{ {
private ChannelReader<Task> _reader; private ChannelReader<Task> _reader;
private ChannelWriter<Task> _writer; private ChannelWriter<Task> _writer;
private Channel<Task> _channel; private Queue<Task> _pendingTasks;
public WebSocketTaskScheduler() public WebSocketTaskScheduler()
{ {
_channel = Channel.CreateUnbounded<Task>(); var channel = Channel.CreateUnbounded<Task>();
_reader = _channel.Reader; _pendingTasks = new Queue<Task>();
_writer = _channel.Writer; _reader = channel.Reader;
_writer = channel.Writer;
} }
protected override IEnumerable<Task>? GetScheduledTasks() protected override IEnumerable<Task>? GetScheduledTasks()
@@ -40,7 +42,10 @@ public class WebSocketTaskScheduler: TaskScheduler
TryExecuteTask(task); TryExecuteTask(task);
if (task.Status != TaskStatus.RanToCompletion) if (task.Status != TaskStatus.RanToCompletion)
_pendingTasks.Enqueue(task);
}
while (_pendingTasks.TryDequeue(out var task))
_writer.TryWrite(task); _writer.TryWrite(task);
} }
} }
}