我有一个简单的异步方法:
@Asynchronous
public void doSomething(Promise<int> something) {
if(something == 0) {
return;
}
ActivityHolder.someActivity();
System.out.println("Current value: " + Integer.toString(something));
doSomething(something--);
}
这就是我正在做的事情,看看我的某个要求是否可行。基本上,我希望批量执行某些操作,每个批次的成员并行运行。我基本上有另一个活动(在另一个班级):
@Activity
public void someActivity() {
// Some stuff
}
我得到的输出是(我用100调用doSomething):
Current value: 100
之后,工作流程执行失败,并向我显示错误,指出未找到活动。为什么没找到?它是如何在第一次执行中找到的?
答案 0 :(得分:3)
一些事情:
传递promise变量时,请在其上调用variable.get()
以提取其值。
如果您未找到活动错误,是否检查此活动是否实际已注册?首先运行您的活动类,看看它们是否从日志中运行。确保您已成功注册活动。
代码应该是这样的(使用Promise.asPromise()
和promise.get()
):
@Asynchronous
public void doSomething(Promise<int> something) {
if(something.get() == 0) {
return;
}
ActivityHolder.someActivity();
System.out.println("Current value: " + Integer.toString(something.get()));
doSomething(Promise.asPromise(something.get()--));
}
这里的ActivityHolder是什么?它是包含someActivity()的类的客户端实现吗?
答案 1 :(得分:1)
以上代码是否编译?
Promise<int>
应为Promise<Integer>
而something--
会出现编译错误,您无法从Promise<Integer>
转换为int
。
无论如何,使用递归来实现并行活动执行看起来并不合适。你可以在这里轻松使用循环 -
List<Promise<Void>> promiseList = new ArrayList<Promise<Void>>();
for (int i=0; i<100; i++) {
Promise<Void> promise = ActivityHolder.someActivity();
promiseList.add(promise);
}
callSomeOtherAsynchronousMethod(arg1, arg2, promiseList);