using Dapr.Workflow; namespace WorkflowApp; /// /// This is the initial version of the workflow. /// Note that the input argument for both activities is the orderItem (string). /// internal sealed class VersioningWorkflow1 : Workflow { public override async Task RunAsync(WorkflowContext context, string orderItem) { var resultA = await context.CallActivityAsync( "ActivityA", orderItem); var resultB = await context.CallActivityAsync( "ActivityB", orderItem); return resultA + resultB; } } /// /// This is the updated version of the workflow. /// The input for ActivityB has changed from orderItem (string) to resultA (int). /// If there are in-flight workflow instances that were started with the previous version /// of this workflow, these will fail when the new version of the workflow is deployed /// and the workflow name remains the same, since the runtime parameters do not match with the persisted state. /// It is recommended to version workflows by creating a new workflow class with a new name: /// {workflowname}1 -> {workflowname}2 /// Try to avoid making breaking changes in perpetual workflows (that use the `ContinueAsNew` method) /// since these are difficult to replace with a new version. /// internal sealed class VersioningWorkflow2 : Workflow { public override async Task RunAsync(WorkflowContext context, string orderItem) { var resultA = await context.CallActivityAsync( "ActivityA", orderItem); var resultB = await context.CallActivityAsync( "ActivityB", resultA); return resultA + resultB; } }