From a87116418c526bb76e0cc11f951d6f8648b71e01 Mon Sep 17 00:00:00 2001 From: Chad Retz Date: Tue, 18 Jun 2024 14:54:19 -0500 Subject: [PATCH] Set Rust callbacks to complete tasks asynchronously (#279) Fixes #248 --- src/Temporalio/Bridge/Client.cs | 6 ++++-- src/Temporalio/Bridge/EphemeralServer.cs | 9 ++++++--- src/Temporalio/Bridge/Worker.cs | 18 ++++++++++++------ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/Temporalio/Bridge/Client.cs b/src/Temporalio/Bridge/Client.cs index 57514c9a..f03373f9 100644 --- a/src/Temporalio/Bridge/Client.cs +++ b/src/Temporalio/Bridge/Client.cs @@ -43,7 +43,8 @@ public static async Task ConnectAsync( { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.client_connect( @@ -125,7 +126,8 @@ public async Task CallAsync( { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.client_rpc_call( diff --git a/src/Temporalio/Bridge/EphemeralServer.cs b/src/Temporalio/Bridge/EphemeralServer.cs index 343296f5..15f60f43 100644 --- a/src/Temporalio/Bridge/EphemeralServer.cs +++ b/src/Temporalio/Bridge/EphemeralServer.cs @@ -51,7 +51,8 @@ public static async Task StartTemporaliteAsync( { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.ephemeral_server_start_dev_server( @@ -76,7 +77,8 @@ public static async Task StartTestServerAsync( { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.ephemeral_server_start_test_server( @@ -97,7 +99,8 @@ public async Task ShutdownAsync() { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.ephemeral_server_shutdown( diff --git a/src/Temporalio/Bridge/Worker.cs b/src/Temporalio/Bridge/Worker.cs index 5b5bed31..1f1f4a0a 100644 --- a/src/Temporalio/Bridge/Worker.cs +++ b/src/Temporalio/Bridge/Worker.cs @@ -96,7 +96,8 @@ public async Task ValidateAsync() { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.worker_validate( @@ -141,7 +142,8 @@ public void ReplaceClient(Client client) { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.worker_poll_workflow_activation( @@ -179,7 +181,8 @@ public void ReplaceClient(Client client) { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.worker_poll_activity_task( @@ -218,7 +221,8 @@ public async Task CompleteWorkflowActivationAsync( { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.worker_complete_workflow_activation( @@ -252,7 +256,8 @@ public async Task CompleteActivityTaskAsync(Api.ActivityTaskCompletion comp) { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.worker_complete_activity_task( @@ -338,7 +343,8 @@ public async Task FinalizeShutdownAsync() { using (var scope = new Scope()) { - var completion = new TaskCompletionSource(); + var completion = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); unsafe { Interop.Methods.worker_finalize_shutdown(