Skip to content

Commit 51f1fde

Browse files
committed
Add DurableTaskClient mediator request extension methods
1 parent a7e012b commit 51f1fde

File tree

5 files changed

+80
-15
lines changed

5 files changed

+80
-15
lines changed

src/Abstractions/ActivityRequest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,21 @@ public static class ActivityRequest
5353
public static IActivityRequest<TResult> Create<TResult>(TaskName name, object? input = null)
5454
=> new Request<TResult>(name, input);
5555

56+
/// <summary>
57+
/// Gets the activity input from a <see cref="IBaseActivityRequest" />.
58+
/// </summary>
59+
/// <param name="request">The request to get input for.</param>
60+
/// <returns>The input.</returns>
61+
internal static object? GetInput(this IBaseActivityRequest request)
62+
{
63+
if (request is IProvidesInput provider)
64+
{
65+
return provider.GetInput();
66+
}
67+
68+
return request;
69+
}
70+
5671
/// <summary>
5772
/// Represents an activity request where the input is not the request itself.
5873
/// </summary>

src/Abstractions/OrchestratorHelper.cs renamed to src/Abstractions/InputHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Microsoft.DurableTask;
66
/// <summary>
77
/// Orchestration/Activity input helpers.
88
/// </summary>
9-
static class InputHelper
9+
static class OrchestratorHelper
1010
{
1111
/// <summary>
1212
/// Due to nullable reference types being static analysis only, we need to do our best efforts for validating the

src/Abstractions/OrchestrationRequest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,21 @@ public static class OrchestrationRequest
5353
public static IOrchestrationRequest<TResult> Create<TResult>(TaskName name, object? input = null)
5454
=> new Request<TResult>(name, input);
5555

56+
/// <summary>
57+
/// Gets the orchestration input from a <see cref="IBaseOrchestrationRequest" />.
58+
/// </summary>
59+
/// <param name="request">The request to get input for.</param>
60+
/// <returns>The input.</returns>
61+
internal static object? GetInput(this IBaseOrchestrationRequest request)
62+
{
63+
if (request is IProvidesInput provider)
64+
{
65+
return provider.GetInput();
66+
}
67+
68+
return request;
69+
}
70+
5671
/// <summary>
5772
/// Represents an orchestration request where the input is not the request itself.
5873
/// </summary>

src/Abstractions/TaskOrchestrationContextRequestExtensions.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static Task<TResult> RunAsync<TResult>(
2323
Check.NotNull(context);
2424
Check.NotNull(request);
2525
TaskName name = request.GetTaskName();
26-
return context.CallSubOrchestratorAsync<TResult>(name, GetInput(request), options);
26+
return context.CallSubOrchestratorAsync<TResult>(name, request.GetInput(), options);
2727
}
2828

2929
/// <summary>
@@ -40,7 +40,7 @@ public static Task RunAsync(
4040
Check.NotNull(context);
4141
Check.NotNull(request);
4242
TaskName name = request.GetTaskName();
43-
return context.CallSubOrchestratorAsync(name, GetInput(request), options);
43+
return context.CallSubOrchestratorAsync(name, request.GetInput(), options);
4444
}
4545

4646
/// <summary>
@@ -58,7 +58,7 @@ public static Task<TResult> RunAsync<TResult>(
5858
Check.NotNull(context);
5959
Check.NotNull(request);
6060
TaskName name = request.GetTaskName();
61-
return context.CallActivityAsync<TResult>(name, GetInput(request), options);
61+
return context.CallActivityAsync<TResult>(name, request.GetInput(), options);
6262
}
6363

6464
/// <summary>
@@ -75,16 +75,6 @@ public static Task RunAsync(
7575
Check.NotNull(context);
7676
Check.NotNull(request);
7777
TaskName name = request.GetTaskName();
78-
return context.CallActivityAsync(name, GetInput(request), options);
79-
}
80-
81-
static object? GetInput(object request)
82-
{
83-
if (request is IProvidesInput provider)
84-
{
85-
return provider.GetInput();
86-
}
87-
88-
return request;
78+
return context.CallActivityAsync(name, request.GetInput(), options);
8979
}
9080
}

src/Client/Core/DependencyInjection/DurableTaskClientExtensions.cs renamed to src/Client/Core/DurableTaskClientExtensions.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,49 @@ public static Task<PurgeResult> PurgeInstancesAsync(
5151
DateTimeOffset? createdTo,
5252
CancellationToken cancellation = default)
5353
=> PurgeInstancesAsync(client, createdFrom, createdTo, null, cancellation);
54+
55+
/// <summary>
56+
/// Starts a new orchestration instance for execution.
57+
/// </summary>
58+
/// <param name="client">The client to schedule the orchestration with.</param>
59+
/// <param name="request">The orchestration request to schedule.</param>
60+
/// <param name="cancellation">The cancellation token.</param>
61+
/// <returns>
62+
/// A task that completes when the orchestration instance is successfully scheduled. The value of this task is the
63+
/// instance ID the orchestration was scheduled with.
64+
/// </returns>
65+
/// <seealso cref="DurableTaskClient.ScheduleNewOrchestrationInstanceAsync(TaskName, object?, CancellationToken)" />
66+
public static Task<string> StartNewAsync(
67+
this DurableTaskClient client, IBaseOrchestrationRequest request, CancellationToken cancellation)
68+
{
69+
Check.NotNull(client);
70+
Check.NotNull(request);
71+
TaskName name = request.GetTaskName();
72+
return client.ScheduleNewOrchestrationInstanceAsync(name, request.GetInput(), cancellation);
73+
}
74+
75+
/// <summary>
76+
/// Starts a new orchestration instance for execution.
77+
/// </summary>
78+
/// <param name="client">The client to schedule the orchestration with.</param>
79+
/// <param name="request">The orchestration request to schedule.</param>
80+
/// <param name="options">The options for starting this orchestration with.</param>
81+
/// <param name="cancellation">The cancellation token.</param>
82+
/// <returns>
83+
/// A task that completes when the orchestration instance is successfully scheduled. The value of this task is
84+
/// the instance ID of the scheduled orchestration instance. If a non-null instance ID was provided via
85+
/// <paramref name="options" />, the same value will be returned by the completed task.
86+
/// </returns>
87+
/// <seealso cref="DurableTaskClient.ScheduleNewOrchestrationInstanceAsync(TaskName, object?, StartOrchestrationOptions?, CancellationToken)" />
88+
public static Task<string> StartNewAsync(
89+
this DurableTaskClient client,
90+
IBaseOrchestrationRequest request,
91+
StartOrchestrationOptions? options = null,
92+
CancellationToken cancellation = default)
93+
{
94+
Check.NotNull(client);
95+
Check.NotNull(request);
96+
TaskName name = request.GetTaskName();
97+
return client.ScheduleNewOrchestrationInstanceAsync(name, request.GetInput(), options, cancellation);
98+
}
5499
}

0 commit comments

Comments
 (0)