ParallelForEach アクティビティでは、コレクションの要素を列挙し、コレクションの各要素に対して埋め込みステートメントを並列的に (同じスレッドで非同期的に) 実行します。このフロー制御アクティビティは、その子アクティビティがアイドル状態になると予想される場合に、Sequence アクティビティの代わりに使用します。
ParallelForEach アクティビティには、ユーザーによって指定された Visual Basic 式を保持する CompletionCondition プロパティがあります。このプロパティは、各分岐の完了後に、ParallelForEach アクティビティによって評価されます。評価結果が true の場合、ParallelForEach アクティビティは他の分岐を実行せずに完了します。CompletionCondition が true に評価されない場合は、すべての子アクティビティが完了するまで ParallelForEach アクティビティが継続されます。
ParallelForEach<T> アクティビティ
ParallelForEach はそれ自体の値を列挙し、列挙した値ごとに Body をスケジュールします。スケジュールされるのは Body のみです。本文の実行方法は、Body がアイドル状態になるかどうかによって異なります。
Body がアイドル状態にならない場合は、スケジュールされたアクティビティがスタックとして扱われるため、逆の順序で実行されます。つまり、最後にスケジュールされたアクティビティが最初に実行されます。たとえば、ParallelForEach に {1,2,3,4} というコレクションがあるときに、WriteLine を本文として使用して値を書き出すとします。この場合は、4、3、2、1 の順にコンソールに出力されます。これは、WriteLine がアイドル状態にならず、スケジュールされた 4 つの WriteLine アクティビティがスタックの動作 (先入れ後出し) に従って実行されたためです。
ただし、Receive アクティビティや Delay アクティビティのように、アイドル状態になる可能性のあるアクティビティが Body に含まれている場合は、それぞれのアクティビティが完了するまで待機する必要はありません。ParallelForEach は、スケジュールされている次の本文アクティビティに進み、実行を試みます。そのアクティビティもアイドル状態になる場合は、ParallelForEach が、さらに次の本文アクティビティに進みます。
ParallelForEach<T> アクティビティ デザイナーの使用
ParallelForEach<T> アクティビティ デザイナーは、[ツールボックス] の [制御フロー] カテゴリにあります。[ツールボックス] にアクセスするには、ワークフロー デザイナーの左側にある [ツールボックス] タブをクリックします (または、[表示] メニューの [ツール バー] をクリックするか、Ctrl キーと Alt キーを押しながら x キーを押します)。
ParallelForEach<T> アクティビティ デザイナーは、[ツールボックス] からドラッグして、アクティビティ デザイナーを通常配置しているワークフロー デザイナー画面の任意の場所 (Sequence アクティビティ デザイナー内など) にドロップできます。このアクティビティ デザイナーをワークフロー デザイナーにドロップすると、ParallelForEach アクティビティが作成されます。既定では、このアクティビティに ParallelForEach<Int32>. の DisplayName が含まれます。
ワークフロー デザイナーでの ParallelForEach<T> のプロパティ
次の表に、最も役に立つ ParallelForEach アクティビティのプロパティと、デザイナーでのその使用方法を示します。
プロパティ名 | 必須 | 使用方法 |
---|---|---|
DisplayName |
省略可 |
ヘッダーのアクティビティ デザイナーの表示名を指定します。既定値は ParallelForEach<Int32> です。この値は、[プロパティ] グリッドで編集することも、アクティビティ デザイナーのヘッダーで直接編集することもできます。 |
Body |
省略可 |
コレクション内の各項目に対して実行するアクティビティ。Body アクティビティを追加するには、"ここにアクティビティをドロップします" というヒント テキストが表示された ParallelForEach<T> アクティビティ デザイナーの [Body] ボックスに、[ツールボックス] からアクティビティをドロップします。 |
TypeArgument |
必須 |
ジェネリック パラメーター T で指定された Values コレクション内の項目の型。既定では、TypeArgument は Int32 に設定されています。ParallelForEach<T> アクティビティ デザイナーで型 T を変更するには、プロパティ グリッドの [TypeArgument] ボックスの値を変更します。 |
Values |
必須 |
反復処理を行う項目のコレクション。Values を設定するには、"VB の式を入力してください" というヒント テキストが表示された ForEach<T> アクティビティ デザイナーの [値] ボックス、または [プロパティ] ウィンドウの [値] ボックスに、Visual Basic の式を入力します。 |
CompletionCondition |
各イテレーションの完了後に評価されます。true であると評価する場合、スケジュールされた保留イテレーションはキャンセルされます。このプロパティが設定されていない場合、スケジュールされたすべてのステートメントは、完了するまで実行されます。 |
既定では、ループ反復子には、item という名前が付けられます。反復子変数の名前は、ParallelForEach<T> アクティビティ デザイナーの [ForEach] ボックスで変更できます。ループ反復子は、ParallelForEach アクティビティの子の式で使用できます。
参照
概念
Sequence アクティビティ デザイナー
Parallel アクティビティ デザイナー