2012-08-06 56 views
0

我試圖在Amazon SWF中安排一項活動。最初,我曾經遍歷列表併爲列表的每個值安排活動。但是這會並行地援引我不想要的活動。所以,我修改了代碼,做這樣的事情:使用Amazon SWF中的不同參數安排相同的活動

Promise<Void> promiseArg = null; 
for(Integer i : IntegerList){ 
    Promise<Void> nextArg = activityClient.activity1(i); 
    promiseArg = nextArg; 
} 

雖然代碼工作,我不知道這是做正確的方式。任何評論都會有幫助。

+0

這可能更有意義,通過承諾活動本身(即'承諾= activityClient.activity1(I,承諾)')。 – 2012-08-06 21:33:59

回答

0

如果未使用promiseArg,使用什麼要點?

如果您希望它們依賴於prev方法調用,請創建一個Asynchronous method並使用promise variable調用該方法。

//Main method of decider. 
Promise<Integer> promiseArg = null; 
Promise<Integer> nextArg = activityClient.activity1(i, 1); 
for(Integer i : IntegerList){ 
    Promise<Integer> nextArg = fun(nextArg, Promise.asPromise(i)); 
} 


@Asynchronous 
public Promise<Integer> fun(Promise<int> nextArg, int i) { 
    System.out.println("Testing with current value: " + Integer.toString(nextArg.get())); 
    return activityClient.activity1(i, nextArg.get()); 
} 

我還沒有測試過它,但它應該可以工作。

除此之外,您還可以嘗試在活動聲明中將prev Promise variable傳遞到活動本身@Wait annotation

這樣的事情,

prevArgs = activityClient.activity1(i, prevArg)); 

與活動一樣,

XYZ activity1(int i,@Wait Promise<int> prevArgs){ 
    //Please check if int should be used instead of Promise<int> 
} 
相關問題