Update Log to wait for items in worker thread
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user