Java Java未来的非阻塞Scala未来

时间:2016-05-25 20:17:55

标签: java scala listener future

我是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
}

0 个答案:

没有答案