diff --git a/src/modules/Elsa.Http/Activities/HttpEndpoint.cs b/src/modules/Elsa.Http/Activities/HttpEndpoint.cs index b38822b42..de63ed736 100644 --- a/src/modules/Elsa.Http/Activities/HttpEndpoint.cs +++ b/src/modules/Elsa.Http/Activities/HttpEndpoint.cs @@ -163,7 +163,7 @@ public class HttpEndpoint : Trigger { var path = Path.Get(context); var methods = SupportedMethods.GetOrDefault(context) ?? new List { HttpMethods.Get }; - context.WaitForHttpRequest(path, methods, OnResumeAsync); + await context.WaitForHttpRequest(path, methods, OnResumeAsync); } private async ValueTask OnResumeAsync(ActivityExecutionContext context) @@ -175,8 +175,8 @@ public class HttpEndpoint : Trigger { // We're executing in a non-HTTP context (e.g. in a virtual actor). // Create a bookmark to allow the invoker to export the state and resume execution from there. - context.CreateCrossBoundaryBookmark(); - return; + await context.CreateCrossBoundaryBookmark(); + return; } await HandleRequestAsync(context); diff --git a/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs b/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs index e3e3666fb..83794e28b 100644 --- a/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs +++ b/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs @@ -20,10 +20,10 @@ public abstract class HttpEndpointBase : Trigger { } - protected override void Execute(ActivityExecutionContext context) + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { var options = GetOptions(); - context.WaitForHttpRequest(options, HttpRequestReceivedAsync); + await context.WaitForHttpRequest(options, HttpRequestReceivedAsync); } protected override IEnumerable GetTriggerPayloads(TriggerIndexingContext context) diff --git a/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs b/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs index 67bc08d52..bf790f2c4 100644 --- a/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs +++ b/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs @@ -3,33 +3,34 @@ using Elsa.Extensions; using Elsa.Http.Bookmarks; using Elsa.Workflows; using Elsa.Workflows.Models; +using System.Threading.Tasks; using Microsoft.AspNetCore.Routing.Patterns; namespace Elsa.Http.Extensions; public static class HttpEndpointActivityExecutionContextExtensions { - public static void WaitForHttpRequest(this ActivityExecutionContext context, string path, string method, ExecuteActivityDelegate? callback = null) +public static async ValueTask WaitForHttpRequest(this ActivityExecutionContext context, string path, string method, ExecuteActivityDelegate? callback = null) +{ + var options = new HttpEndpointOptions { - var options = new HttpEndpointOptions - { - Path = path, - Methods = [method] - }; - WaitForHttpRequest(context, options, callback); - } + Path = path, + Methods = [method] + }; + await WaitForHttpRequest(context, options, callback); +} - public static void WaitForHttpRequest(this ActivityExecutionContext context, string path, IEnumerable methods, ExecuteActivityDelegate? callback = null) +public static async ValueTask WaitForHttpRequest(this ActivityExecutionContext context, string path, IEnumerable methods, ExecuteActivityDelegate? callback = null) +{ + var options = new HttpEndpointOptions { - var options = new HttpEndpointOptions - { - Path = path, - Methods = methods.ToList() - }; - WaitForHttpRequest(context, options, callback); - } + Path = path, + Methods = methods.ToList() + }; + await WaitForHttpRequest(context, options, callback); +} - public static void WaitForHttpRequest(this ActivityExecutionContext context, HttpEndpointOptions options, ExecuteActivityDelegate? callback = null) + public static async ValueTask WaitForHttpRequest(this ActivityExecutionContext context, HttpEndpointOptions options, ExecuteActivityDelegate? callback = null) { var path = options.Path; if (path.Contains("//")) @@ -42,7 +43,8 @@ public static class HttpEndpointActivityExecutionContextExtensions return; } - callback?.Invoke(context); + if (callback is not null) + await callback(context); } public static IEnumerable GetHttpEndpointStimuli(this TriggerIndexingContext context, string path, string method) @@ -81,7 +83,7 @@ public static class HttpEndpointActivityExecutionContextExtensions .ToArray(); } - internal static void CreateCrossBoundaryBookmark(this ActivityExecutionContext context, ExecuteActivityDelegate? callback = null) + internal static ValueTask CreateCrossBoundaryBookmark(this ActivityExecutionContext context, ExecuteActivityDelegate? callback = null) { var bookmarkOptions = new CreateBookmarkArgs { @@ -90,5 +92,6 @@ public static class HttpEndpointActivityExecutionContextExtensions Metadata = BookmarkMetadata.HttpCrossBoundary, }; context.CreateBookmark(bookmarkOptions); + return ValueTask.CompletedTask; } } \ No newline at end of file