我有一个长期运行的Scala Future
,其操作如下:
在收到外部信号后(意味着Future
将不知道它应该运行多长时间),我希望能够告诉Future
终止并给我中间结果。我可以使用某种旁边通道来做到这一点(注意:这是一个使用Akka
的Java程序,因此我在Java中创建了Scala未来以及所有随附的样板文件):
public void doCalculation(AtomicBoolean interrupt, AtomicReference output) {
Futures.future(new Callable<Boolean>() {
public Boolean call() {
Object previous = // calculate initial value
output.set(previous);
while(!interrupt.get()) {
Object next = // calculate next value
if(/* next is better than previous */) {
previous = next;
output.set(previous);
} else return true;
}
return false;
}
}, TypedActor.dispatcher());
}
这样,无论是谁调用doCalculation
,都可以通过output
获取中间值,并可以通过Future
终止interrupt
。但是,我想知道是否有办法在不诉诸辅助渠道的情况下做到这一点,因为这会让其他人难以维护我的代码。我们正在使用Java 7。