Quick answer: Godot 4 load_threaded_get blocking forever when the resource fails to load? Failure status not checked - poll load_threaded_get_status before calling get.

Bad asset path. load_threaded_get hangs; main thread frozen.

Poll status first

var status = ResourceLoader.load_threaded_get_status(path)
if status == ResourceLoader.THREAD_LOAD_FAILED:
    push_error("load failed: %s" % path)
    return null

Check status; only call get when LOADED. Skip when FAILED.

Or timeout the load

Track start time; abandon after N seconds. The async resource leaks; better than a frozen game.

Validate paths at edit time

Most load failures are typos. A startup pass that loads every path catches them before runtime.

“Async APIs can fail. Failure detection has to be explicit.”

Build a 'safe load' helper around load_threaded with timeout and error logging. Misuse-resistant; default for new code.

Related reading