Quick answer: Godot 4 C# code creating objects from a Task continuation throwing 'no synchronization context'? Godot doesn't install an awaitable context - marshal to main via CallDeferred or set Godot.SynchronizationContext.
await httpClient.GetAsync(url) resumes on threadpool; new Node() throws because Godot objects can't be created off-thread.
Marshal to main
var data = await httpClient.GetAsync(url);
CallDeferred(MethodName.OnLoaded, data);Network on threadpool; object creation on main. The right split.
Or install Godot's context
Godot 4.3+: SynchronizationContext.SetSynchronizationContext(new GodotSynchronizationContext()). await-continuations resume on main automatically.
Avoid object creation in continuations
Style guideline: continuations parse data; main creates objects from the data. Cleanly threaded.
“C# async needs a synchronization context. Godot doesn't install one by default.”
Adopt the marshal-via-CallDeferred pattern project-wide. Reviewers spot async object-creation as a code smell.