Quick answer: Godot 4 C# Task scheduled with GodotTaskScheduler not resuming on main thread? Some scheduler paths use the threadpool - explicitly use SynchronizationContext.Post.

Async operation resumes on a threadpool thread; tries to touch a Node; crashes.

Use Godot context

SynchronizationContext.SetSynchronizationContext(
  new GodotSynchronizationContext());

Installs at startup. ConfigureAwait(true) resumes on main.

Or marshal explicitly

After await, CallDeferred(...) to do Node-touching work. Doesn't depend on the context.

Audit ConfigureAwait usage

ConfigureAwait(false) skips the synchronization context. Useful for I/O; dangerous for engine code.

“C# async needs a synchronization context. Godot installs one in 4.3+; not in earlier.”

Establish the project's context-handling convention early. Document; review; the inconsistency is the bug surface.

Related reading