Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaShared/SharedSource/SingleThreadWorker.cs
NotAlwaysTrue 8bfe8a2c37 OBT/1.0.14
Fixed parallelism count issue
Added SingleThreadWorker to handle single-thread related works
Fixed incorrect order when updating gaps
Potentially Fixed #39
2026-01-08 12:40:30 +08:00

44 lines
1.2 KiB
C#

using System;
using System.Collections.Concurrent;
namespace Barotrauma
{
public class SingleThreadWorker
{
private ConcurrentQueue<Action> ActionQueue;
public static SingleThreadWorker GlobalWorker = new SingleThreadWorker();
public SingleThreadWorker()
{
ActionQueue = new ConcurrentQueue<Action>();
}
public void AddAction(Action action)
{
ActionQueue.Enqueue(action);
}
[STAThread]
public void RunActions()
{
while (ActionQueue.TryDequeue(out Action action))
{
try
{
action();
}
catch (Exception e)
{
// Just try-catch and do nothing but print errorlogs. We cannot afford crashing the game.
ConsoleColor originalForeground = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"WARNING: Error occurred when running Single Thread Actions \n{e}");
Console.ForegroundColor = Console.ForegroundColor;
}
}
}
}
}