2011-08-14 10 views
1

私は、一度に1つのスレッドで実行される単一のワークフローインスタンスを認識しています。私はpickアクティビティ内で2つのreceiveアクティビティを持つワークフローを持っています。メッセージ相関は、両方のアクティビティへの要求を同じインスタンスにルーティングする必要があることを確認するために実装されています。ワークフローでマルチスレッドを実装する

最初の受信ブランチでは、1つのブランチで遅延アクティビティを持つ並列アクティビティがあります。パラレルアクティビティは、遅延が終了したか、またはフラグがtrueに設定されたかのいずれかを完了します。

並列アクティビティが、2番目の受信アクティビティからのコールを受信できる条件を満たすのを待っていますか?フラグはそのブランチを通じてのみtrueに設定されるためです。私はあなたの提案やアイデアを待っています。

答えて

0

あなたがここで達成しようとしていることはよく分かりません。

分岐が2つあり、両方の分岐に受信が含まれている場合は、2つの受信アクティビティが待機している2つのメッセージのいずれかを受信した後も処理が続行されます。もう一方はキャンセルされ、何も受け取りません。 1つのReceiveがParallelにあるという事実は、ここで違いはありません。したがって、これがループ上になければ、ワークフローに複数のWCFメッセージを受信することはありません。

+0

をどのように動作するかを理解するのに役立ちますwhileループとワークフローインスタンスは、まだそれがすべてのメッセージを取得するまで待機があります。 WF 4.0では並列プログラミングが非常に難しく、シンプルなマルチスレッドワークフローを設計することができないと感じています。私は正しい方向に問題に近づいていないかもしれません。 – VJAI

+0

あなたが質問に正しく指摘したように、ワークフローにマルチスレッド実行はありません。しかし、すべてが非同期にスケジュールされるため、キューイングがあります。両方のWCFリクエストは、最初のものが処理されるのとほぼ同じ時間に到着し、ワークフローがreceiveアクティビティで同じPickにループバックすると、2番目のものがキューに入れられ、処理されます。 – Maurice

+0

ご返信ありがとうございます。新しいリクエストが2番目の受信ブランチに到着したときに遅延アクティビティをキャンセルすることは可能ですか?それでも、1つのスレッドで処理されます。今すぐ起きるのは、最初の受信ブランチが遅延アクティビティに襲われたときです。あなたが言ったように、キューに入れられた2番目のブランチからリクエストを受け取ることができませんが、遅延が終了すると、キューに入れられたリクエストが処理されます。私は遅延をキャンセルしてリクエストを処理したいだけです。 – VJAI

関連する問題