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.

Related reading