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.