Quick answer: Godot 4 C# signal emit from worker thread deadlocking the engine? Signal emission must happen on main - marshal via CallDeferred or use Godot.Bridge.CallableBridge.
Background HTTP request completes on a worker. Calls EmitSignal to notify UI. Editor freezes.
Defer the emit
CallDeferred(MethodName.OnLoaded);Schedules the emit on the main thread. The signal fires safely.
Or use Callable.From
Callable.From(this, MethodName.OnLoaded).CallDeferred(). Same effect; functional style.
Avoid Godot Object touches from worker
Any Godot Object property access from a non-main thread is undefined. Marshal everything.
“Godot's main thread is the only safe place for signal emit. C# threading inherits the constraint.”
Build a small ThreadHelper class with WorkerToMain