Running pipeline blocks synchronously or asynchronously
Starting with Sitecore XC 10.0, all pipeline blocks derive from either the AsyncPipelineBlock class or the SyncPipelineBlock class, depending on whether a method must run asynchronously or synchronously.
Using the AsyncPipelineBlock and SyncPipelineBlock classes
To execute a pipeline block synchronously, use the SyncPipelineBlock class. The method name used to run a block synchronously is Run(). For example:
public class SampleSyncBlock : SyncPipelineBlock<string, string, CommercePipelineExecutionContext>
{
public override string Run(string arg, CommercePipelineExecutionContext context)
{
////
return arg;
}
}To run a pipeline block asynchronously, use the AsyncPipelineBlock. The method name used to run a block asynchronously is RunAsync(). For example:
public class SampleAsyncBlock : AsyncPipelineBlock<string, string, CommercePipelineExecutionContext>
{
public override Task<string> RunAsync(string arg, CommercePipelineExecutionContext context)
{
////
return Task.FromResult(arg);
}
}The IPipeline RunAsync() method
Starting with Sitecore XC 10.0, the IPipeline interface method is changed from Run to RunAsync() because the method is an asynchronous operation.
Each pipeline can use a combination of synchronous and asynchronous blocks.
Conditional pipeline blocks
Starting with Sitecore 10.0, all conditional pipeline blocks must derive from either one of the following synchronous or asynchronous block classes:
-
ConditionalPipelineBLock -
AsyncConditionalPipelineBLock
To run a conditional pipeline block synchronously, you derive it from the ConditionalPipelineBLock class. For example:
public class SampleSyncConditionalPipelineBlock : ConditionalPipelineBlock<string, string, CommercePipelineExecutionContext>
{
public override string Run(string arg, CommercePipelineExecutionContext context)
{
return arg;
}
public override string ContinueTask(string arg, CommercePipelineExecutionContext context)
{
return arg;
} To run a conditional block asynchronously, you derive it from the AsyncConditionalPipelineBLock class. For example:
public class SampleAsyncConditionalPipelineBlock : AsyncConditionalPipelineBlock<string, string, CommercePipelineExecutionContext>
{
public override Task<string> RunAsync(string arg, CommercePipelineExecutionContext context)
{
return Task.FromResult(arg);
}
public override Task><string> ContinueTask(string arg, CommercePipelineExecutionContext context)
{
return Task.FromResult(arg);
}
}
Policy trigger conditional blocks
Starting with Sitecore 10.0, all policy trigger conditional blocks must derive from one of the following synchronous or asynchronous pipeline block classes:
-
SyncPolicyTriggerConditionalPipelineBLock -
AsyncPolicyTriggerConditionalPipelineBLock
A policy trigger block sets a header in the context that stops the block from running. For example, to skip cart calculation in a block, set ShouldNotRunPolicyTrigger to "DoNotCalculateCart".
To run a policy trigger conditional block synchronously, you derive it from the SyncPolicyTriggerConditionalPipelineBLock class. For example:
public class SamplePolicyTriggerConditionalPipelineBlock : PolicyTriggerConditionalPipelineBlock<string, string>
{
public override string Run(string arg, CommercePipelineExecutionContext context)
{
return arg;
}
public override string ShouldNotRunPolicyTrigger => "DoNotRunThis";
}To run a policy trigger conditional block asynchronously, you derive it from the AsyncPolicyTriggerConditionalPipelineBLock class. For example:
public class SampleAsyncPolicyTriggerConditionalPipelineBlock : AsyncPolicyTriggerConditionalPipelineBlock<string, string>
{
public override Task<string> RunAsync(string arg, CommercePipelineExecutionContext context)
{
return Task.FromResult(arg);
}
public override string ShouldNotRunPolicyTrigger => "DoNotRunThis";
}