Set current SynchronizationContext before the game loop starts

This fixes the problem that `SynchronizationContext.Current` would be null
during the call to `_EnterTree`, `_Ready` and the first call to `_Process` thus
the task continuations would be scheduled outside the main thread, which is unexpected and might lead to crashes.

With this change, task continuations are scheduled always on the main thread and so async/await can be used without any explicit synchronization, which is what is expected.

Fixes #18849

(cherry picked from commit f25240cfe6)
This commit is contained in:
Adam Cigánek 2018-05-14 12:22:20 +02:00 committed by Hein-Pieter van Braam
parent 9294978596
commit b95cc40640
1 changed files with 1 additions and 1 deletions

View File

@ -14,6 +14,7 @@ namespace Godot
public GodotTaskScheduler()
{
Context = new GodotSynchronizationContext();
SynchronizationContext.SetSynchronizationContext(Context);
}
protected sealed override void QueueTask(Task task)
@ -57,7 +58,6 @@ namespace Godot
public void Activate()
{
SynchronizationContext.SetSynchronizationContext(Context);
ExecuteQueuedTasks();
Context.ExecutePendingContinuations();
}