我是Scala和Scala Futures的新手
我有一个Handle接口,它实现了Java的未来,并且有一个监听器
public interface Handle<T> extends java.util.concurrent.Future<T> {
void addListener(Listener<T> l);
static interface Listener<T> {
void success(Handle<T> handle, T output);
void error(Handle<T> handle, Throwable t);
}
}
我有一个返回此Handle的Scala API。我想让这个电话非阻塞
def test(): Handle[T] {
// I have a method here that returns a Handle
val handle = call()
handle
}
我正在考虑如何在Listener的帮助下使用scala.concurrent.Promise来使进程单独发生,以便它是非阻塞的
目前,我这样做
def test(): Future[T] {
val p = Promise[T]
val handle = call().addListener(new Listener[T] {
override def success(handle: Handle[T], result: T) = p.success(result)
override def error(handle: Handle[T], t: Throwable) = p.failure(t)
}
p.future
}