Update Log to wait for items in worker thread

This commit is contained in:
teinarss
2021-04-12 20:24:19 +02:00
committed by Paul Chote
parent 1f01d0b6b1
commit b23d533006

View File

@@ -55,11 +55,14 @@ namespace OpenRA
Channel = System.Threading.Channels.Channel.CreateUnbounded<ChannelData>(); Channel = System.Threading.Channels.Channel.CreateUnbounded<ChannelData>();
ChannelWriter = Channel.Writer; ChannelWriter = Channel.Writer;
Thread = new Thread(DoWork); Thread = new Thread(DoWork)
var cancellationTokenToken = CancellationToken.Token; {
Thread.Start(cancellationTokenToken); Name = "OpenRA Logging Thread"
};
Timer = new Timer(FlushToDisk, cancellationTokenToken, FlushInterval, Timeout.InfiniteTimeSpan); Thread.Start(CancellationToken.Token);
Timer = new Timer(FlushToDisk, CancellationToken.Token, FlushInterval, Timeout.InfiniteTimeSpan);
} }
static void FlushToDisk(object state) static void FlushToDisk(object state)
@@ -83,9 +86,13 @@ namespace OpenRA
var reader = Channel.Reader; var reader = Channel.Reader;
while (!token.IsCancellationRequested) while (!token.IsCancellationRequested)
if (reader.TryRead(out var item)) {
while (reader.TryRead(out var item))
WriteValue(item); WriteValue(item);
Thread.Sleep(1);
}
while (reader.TryRead(out var item)) while (reader.TryRead(out var item))
WriteValue(item); WriteValue(item);
@@ -173,6 +180,7 @@ namespace OpenRA
{ {
CancellationToken.Cancel(); CancellationToken.Cancel();
Timer.Dispose(); Timer.Dispose();
Thread.Join();
} }
} }
} }