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