diff --git a/src/SharpIDE.Godot/NodeExtensions.cs b/src/SharpIDE.Godot/NodeExtensions.cs index a34ab65..f2b2da6 100644 --- a/src/SharpIDE.Godot/NodeExtensions.cs +++ b/src/SharpIDE.Godot/NodeExtensions.cs @@ -37,6 +37,43 @@ public static class NodeExtensions extension(Node node) { public Task InvokeAsync(Action workItem) + { + var taskCompletionSource = new TaskCompletionSource(); + //WorkerThreadPool.AddTask(); + Dispatcher.SynchronizationContext.Post(_ => + { + try + { + workItem(); + taskCompletionSource.SetResult(); + } + catch (Exception ex) + { + taskCompletionSource.SetException(ex); + } + }, null); + return taskCompletionSource.Task; + } + + public Task InvokeAsync(Func workItem) + { + var taskCompletionSource = new TaskCompletionSource(); + Dispatcher.SynchronizationContext.Post(async void (_) => + { + try + { + await workItem(); + taskCompletionSource.SetResult(); + } + catch (Exception ex) + { + taskCompletionSource.SetException(ex); + } + }, null); + return taskCompletionSource.Task; + } + + public Task InvokeDeferredAsync(Action workItem) { var taskCompletionSource = new TaskCompletionSource(); //WorkerThreadPool.AddTask(); @@ -55,7 +92,7 @@ public static class NodeExtensions return taskCompletionSource.Task; } - public Task InvokeAsync(Func workItem) + public Task InvokeDeferredAsync(Func workItem) { var taskCompletionSource = new TaskCompletionSource(); //WorkerThreadPool.AddTask();