Minor refactoring

This commit is contained in:
Sipke Schoorstra 2018-10-16 12:41:12 +02:00
parent 48f7543816
commit 333e09744b
6 changed files with 22 additions and 18 deletions

View file

@ -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);
}
}

View file

@ -5,5 +5,6 @@ namespace Flowsharp.Models
{
public class Variables : Dictionary<string, object>
{
public static readonly Variables Empty = new Variables();
}
}

View file

@ -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)

View file

@ -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);

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}