chip-game/Assets/Scripts/Inputs/ComSystem/UnityMainThreadDispatcher.cs
_sega 0ba6c842b2 Настройки с сайта работают
След. шаг это авторизация
2026-01-28 12:41:28 +03:00

67 lines
1.5 KiB
C#

using System.Collections.Concurrent;
using System.Threading.Tasks;
using UnityEngine;
using System;
public class UnityMainThreadDispatcher : MonoBehaviour
{
private static UnityMainThreadDispatcher instance;
private readonly ConcurrentQueue<Action> actionQueue = new ConcurrentQueue<Action>();
public static void Initialize()
{
if (instance == null)
{
var go = new GameObject("UnityMainThreadDispatcher");
//DontDestroyOnLoad(go);
instance = go.AddComponent<UnityMainThreadDispatcher>();
}
}
public static UnityMainThreadDispatcher Instance
{
get
{
if (instance == null)
{
var go = new GameObject("UnityMainThreadDispatcher");
//DontDestroyOnLoad(go);
instance = go.AddComponent<UnityMainThreadDispatcher>();
}
return instance;
}
}
public void Enqueue(Action action)
{
actionQueue.Enqueue(action);
}
public Task EnqueueAsync(Action action)
{
var tcs = new TaskCompletionSource<bool>();
actionQueue.Enqueue(() =>
{
try
{
action();
tcs.SetResult(true);
}
catch (Exception e)
{
tcs.SetException(e);
}
});
return tcs.Task;
}
private void Update()
{
while (actionQueue.TryDequeue(out var action))
{
action();
}
}
}