Minor refactoring
This commit is contained in:
parent
48f7543816
commit
333e09744b
|
|
@ -8,7 +8,7 @@ namespace Flowsharp
|
|||
public interface IWorkflowInvoker
|
||||
{
|
||||
IActivityInvoker ActivityInvoker { get; }
|
||||
Task<WorkflowExecutionContext> InvokeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowExecutionContext> ResumeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowExecutionContext> InvokeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowExecutionContext> ResumeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@ namespace Flowsharp.Models
|
|||
{
|
||||
public class Variables : Dictionary<string, object>
|
||||
{
|
||||
public static readonly Variables Empty = new Variables();
|
||||
}
|
||||
}
|
||||
|
|
@ -20,8 +20,9 @@ namespace Flowsharp
|
|||
private readonly ILogger logger;
|
||||
public IActivityInvoker ActivityInvoker { get; }
|
||||
|
||||
public async Task<WorkflowExecutionContext> InvokeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default)
|
||||
public async Task<WorkflowExecutionContext> InvokeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default)
|
||||
{
|
||||
workflow.Arguments = arguments ?? new Variables();
|
||||
var workflowExecutionContext = new WorkflowExecutionContext(workflow);
|
||||
var isResuming = workflowExecutionContext.Workflow.Status == WorkflowStatus.Resuming;
|
||||
|
||||
|
|
@ -53,10 +54,10 @@ namespace Flowsharp
|
|||
return workflowExecutionContext;
|
||||
}
|
||||
|
||||
public Task<WorkflowExecutionContext> ResumeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default)
|
||||
public Task<WorkflowExecutionContext> ResumeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default)
|
||||
{
|
||||
workflow.Status = WorkflowStatus.Resuming;
|
||||
return InvokeAsync(workflow, startActivity, cancellationToken);
|
||||
return InvokeAsync(workflow, startActivity, arguments, cancellationToken);
|
||||
}
|
||||
|
||||
private async Task<ActivityExecutionResult> ExecuteActivityAsync(WorkflowExecutionContext workflowContext, IActivity activity, bool isResuming, CancellationToken cancellationToken)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Flowsharp.Models;
|
||||
using Flowsharp.Samples.Console.Workflows;
|
||||
using Flowsharp.Serialization;
|
||||
|
||||
|
|
@ -19,7 +20,7 @@ namespace Flowsharp.Samples.Console.Programs
|
|||
public async Task RunAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var workflow = new AdditionWorkflow();
|
||||
var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, cancellationToken);
|
||||
var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, Variables.Empty, cancellationToken);
|
||||
var json = serializer.Serialize(workflow);
|
||||
|
||||
System.Console.WriteLine(json);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Flowsharp.Models;
|
||||
using Flowsharp.Samples.Console.Activities;
|
||||
using Flowsharp.Samples.Console.Workflows;
|
||||
using Flowsharp.Serialization;
|
||||
|
||||
|
|
@ -21,27 +22,27 @@ namespace Flowsharp.Samples.Console.Programs
|
|||
public async Task RunAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var workflow = new AdditionWorkflowLongRunning();
|
||||
var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, cancellationToken);
|
||||
var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, Variables.Empty, cancellationToken);
|
||||
|
||||
while (workflowContext.Workflow.Status == WorkflowStatus.Halted)
|
||||
{
|
||||
workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, "x", cancellationToken);
|
||||
workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, "y", cancellationToken);
|
||||
workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, "tryAgain", cancellationToken);
|
||||
workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, cancellationToken);
|
||||
workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, cancellationToken);
|
||||
workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, cancellationToken);
|
||||
}
|
||||
|
||||
var json = serializer.Serialize(workflowContext.Workflow);
|
||||
System.Console.WriteLine(json);
|
||||
}
|
||||
|
||||
private async Task<WorkflowExecutionContext> ReadAndResumeAsync(Workflow workflow, string argumentName, CancellationToken cancellationToken)
|
||||
private async Task<WorkflowExecutionContext> ReadAndResumeAsync(Workflow workflow, CancellationToken cancellationToken)
|
||||
{
|
||||
var json = serializer.Serialize(workflow);
|
||||
workflow = serializer.Deserialize(json);
|
||||
var haltedActivity = workflow.HaltedActivities.Single();
|
||||
workflow.Arguments[argumentName] = System.Console.ReadLine();
|
||||
workflow.Status = WorkflowStatus.Resuming;
|
||||
return await workflowInvoker.InvokeAsync(workflow, haltedActivity, cancellationToken);
|
||||
var haltedActivity = (ReadLine)workflow.HaltedActivities.Single();
|
||||
var args = new Variables {{ haltedActivity.ArgumentName, System.Console.ReadLine() }};
|
||||
|
||||
return await workflowInvoker.ResumeAsync(workflow, haltedActivity, args, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -26,7 +26,7 @@ namespace Flowsharp.Samples.Console.Programs
|
|||
var resourceReader = new StreamReader(resource);
|
||||
var data = await resourceReader.ReadToEndAsync();
|
||||
var workflow = serializer.Deserialize(data);
|
||||
var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, cancellationToken);
|
||||
var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, Variables.Empty, cancellationToken);
|
||||
|
||||
while (workflowContext.Workflow.Status == WorkflowStatus.Halted)
|
||||
{
|
||||
|
|
@ -41,8 +41,8 @@ namespace Flowsharp.Samples.Console.Programs
|
|||
private async Task<WorkflowExecutionContext> ReadAndResumeAsync(Workflow workflow, CancellationToken cancellationToken)
|
||||
{
|
||||
var haltedActivity = (ReadLine)workflow.HaltedActivities.Single();
|
||||
workflow.Arguments[haltedActivity.ArgumentName] = System.Console.ReadLine();
|
||||
return await workflowInvoker.ResumeAsync(workflow, haltedActivity, cancellationToken);
|
||||
var args = new Variables {{ haltedActivity.ArgumentName, System.Console.ReadLine() }};
|
||||
return await workflowInvoker.ResumeAsync(workflow, haltedActivity, args, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue