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.Threading.Channels;
using System.Threading.Tasks;
using NLog.LayoutRenderers.Wrappers;
namespace Ragon.Core;
@@ -9,13 +10,14 @@ public class WebSocketTaskScheduler: TaskScheduler
{
private ChannelReader<Task> _reader;
private ChannelWriter<Task> _writer;
private Channel<Task> _channel;
private Queue<Task> _pendingTasks;
public WebSocketTaskScheduler()
{
_channel = Channel.CreateUnbounded<Task>();
_reader = _channel.Reader;
_writer = _channel.Writer;
var channel = Channel.CreateUnbounded<Task>();
_pendingTasks = new Queue<Task>();
_reader = channel.Reader;
_writer = channel.Writer;
}
protected override IEnumerable<Task>? GetScheduledTasks()
@@ -40,7 +42,10 @@ public class WebSocketTaskScheduler: TaskScheduler
TryExecuteTask(task);
if (task.Status != TaskStatus.RanToCompletion)
_pendingTasks.Enqueue(task);
}
while (_pendingTasks.TryDequeue(out var task))
_writer.TryWrite(task);
}
}
}