---
title: "パイプラインブロックの同期または非同期の実行"
slug: "running-pipeline-blocks-synchronously-or-asynchronously"
abstract: "AsyncPipelineBlockおよびSyncPipelineBlockクラスを使って、Commerceパイプラインを非同期または同期的に実行する方法。"
---
# パイプラインブロックの同期または非同期の実行

Sitecore XC 10.0以降、すべてのパイプラインブロックは、メソッドが非同期または非同期で実行されるかによって、AsyncPipelineBlockクラスまたはSyncPipelineBlockクラスのいずれかから派生します。

## AsyncPipelineBlockおよびSyncPipelineBlockクラスの使用

パイプラインブロックを同期的に実行するには、SyncPipelineBlockクラスを使用します。ブロックを同期的に実行するために使われるメソッド名はRun()です。例えば:

public class SampleSyncBlock : SyncPipelineBlock<string, string, CommercePipelineExecutionContext>
{
 public override string Run(string arg, CommercePipelineExecutionContext context)
 {
 ////
 return arg;
 }
}

パイプラインブロックを非同期で実行するには、AsyncPipelineBlockを使用します。非同期でブロックを実行する方法名はRunAsync()です。例えば:

public class SampleAsyncBlock : AsyncPipelineBlock<string, string, CommercePipelineExecutionContext>
{
 public override Task<string> RunAsync(string arg, CommercePipelineExecutionContext context)
 {
 ////
 return Task.FromResult(arg);
 }
}

## IPipeline RunAsync() メソッド

Sitecore XC 10.0以降、IPipelineインターフェースメソッドは非同期操作であるため、RunからRunAsync() に変更されました。

各パイプラインは同期ブロックと非同期ブロックの組み合わせを使用できます。

## 条件付きパイプラインブロック

Sitecore 10.0以降、すべての条件付きパイプラインブロックは、以下の同期または非同期ブロッククラスのいずれかから派生しなければなりません。

-   ConditionalPipelineBLock
-   AsyncConditionalPipelineBLock

条件付きパイプラインブロックを同期的に実行するには、ConditionalPipelineBLockクラスから導出します。例えば:

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

条件付きブロックを非同期で実行するには、AsyncConditionalPipelineBLockクラスから導出します。例えば:

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

## ポリシートリガー条件付きブロック

Sitecore 10.0以降、すべてのポリシートリガー条件付きブロックは、以下のいずれかの同期または非同期パイプラインブロッククラスから派生しなければなりません。

-   SyncPolicyTriggerConditionalPipelineBLock
-   AsyncPolicyTriggerConditionalPipelineBLock

> !注ポリシートリガーブロックは、そのブロックの実行を停止するコンテキスト内のヘッダーを設定します。例えば、ブロック内のカートリッジ計算をスキップするには、ShouldNotRunPolicyTriggerを "DoNotCalculateCart"に設定します。

ポリシートリガー条件ブロックを同期的に実行するには、SyncPolicyTriggerConditionalPipelineBLockクラスから導出します。例えば:

public class SamplePolicyTriggerConditionalPipelineBlock : PolicyTriggerConditionalPipelineBlock<string, string>
{
 public override string Run(string arg, CommercePipelineExecutionContext context)
 {
 return arg;
 }
 public override string ShouldNotRunPolicyTrigger => "DoNotRunThis";
}

ポリシートリガー条件ブロックを非同期で実行するには、AsyncPolicyTriggerConditionalPipelineBLockクラスから導出します。例えば:

public class SampleAsyncPolicyTriggerConditionalPipelineBlock : AsyncPolicyTriggerConditionalPipelineBlock<string, string>
{
 public override Task<string> RunAsync(string arg, CommercePipelineExecutionContext context)
 {
 return Task.FromResult(arg);
 }
 public override string ShouldNotRunPolicyTrigger => "DoNotRunThis";
}