1

複数の段階があるアプリの作成に取り組んでいます。最初の段階では、複数のタスクが並行して実行されます...その段階のすべてのタスクが完了すると、処理は次の段階に進む必要があります。

私がディサイダーについて読んだことによると、ディサイダーは次の段階で考えられる多くのオプションの中から 1 つを選択できます。

しかし、現在の段階のすべての並列プロセスが完了したときにのみ、次の段階に進みたいと考えています。

これは、次のステージを呼び出すように各並列プロセスをセットアップする必要があり、次のステージが初期化されたときに、前のステージのすべての並列プロセスが完了してから実際に処理を開始する必要があることを意味しますか? これは、第 1 ステージのすべての並列プロセスが corresp を呼び出すことを意味します。第 2 段階の並列プロセス。そのうちの 1 つだけが実際に処理を行います (これは、前段階のすべてのプロセスが完了したことを検出するプロセスになるため)。

これを実装するより良い方法はありますか?次の段階のプロセスが一度だけ呼び出されるようにするには?

4

1 に答える 1

5

これは、フローフレームワークのアクティビティによって返されるPromiseオブジェクトを使用して解決できます。

ディサイダーコードに、それぞれがPromiseオブジェクトを返す複数のアクティビティを並行して実行するstage1の関数があります。これらすべてのpromiseオブジェクトをに追加し、List<Promise<>>このリストをステージ2を処理する非同期メソッドに渡します。

これがサンプルの決定コードです。stage1()3つのアクティビティを並行して実行し、非同期メソッドを呼び出しますstage2(@Wait List<Promise<Void>> promiseList)。ステージ2は、promiseListのすべての約束が満たされない限り、つまり、ステージ1の3つのアクティビティがすべて完了しない限り開始されません。

private void stage1() {
    List<Promise<Void>> promiseList = new ArrayList<Promise<Void>>();
    Promise<Void> promise1 = activityClient.activity1();
    Promise<Void> promise2 = activityClient.activity2();
    Promise<Void> promise3 = activityClient.activity3();

    promiseList.add(promise1);
    promiseList.add(promise2);
    promiseList.add(promise3);

    stage2(promiseList);
}

@Asynchronous
private void stage2(@Wait List<Promise<Void>> promiseList) {
    activityClient.activity4();
}
于 2012-06-22T17:15:09.140 に答える