using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; namespace Godot { public class GodotSynchronizationContext : SynchronizationContext { private readonly BlockingCollection> _queue = new BlockingCollection>(); public override void Post(SendOrPostCallback d, object state) { _queue.Add(new KeyValuePair(d, state)); } public void ExecutePendingContinuations() { while (_queue.TryTake(out var workItem)) { workItem.Key(workItem.Value); } } } }