Quick answer: Godot 4 call_deferred from a worker thread silently dropped during loading screens? Tree process is paused during load - run via the SceneTree.process_frame signal awaiter.

Background data load completes; result is deferred to main. Main thread is busy in loading state; the deferred call sits in queue indefinitely.

Await process_frame

await get_tree().process_frame
on_loaded(result)

Awaits the tree's next process tick. Survives pause states better than call_deferred during load.

Or process_mode Always

Mark the receiver node with Process Mode = Always. Deferred calls dispatch even during paused tree.

Restructure the load

Load on the main thread with explicit progress yields. Eliminates the threading; loading screen stays responsive.

“Deferred calls run on tree process. Paused trees don't process.”

For loading screens, prefer an explicit state machine that yields per work chunk. Threading complicates the cleanup story.

Related reading