How do I wait for asynchronous tasks to complete in scala?

て烟熏妆下的殇ゞ 提交于 2019-11-29 23:10:51

Use scala.concurrent.{Future, Promise}:

def doAsyncAction: Promise[T] = {
  val p = Promise[T]
  p success doSomeOperation
  p
}

def useResult = {
   val async = doAsyncAction;
   // The return of the below is Unit.
   async.future onSuccess {
      // do action.
   };
};

Another way is to Await the result. (this is a blocking action).

Used when you need to return the result

import scala.concurrent.{ ExecutionContext, ExecutionContext$, Future, Promise, Await }
import scala.concurrent.duration._

def method: Option[T] = {
   val future: Future[T] = Future {
       someAction
   }
   val response = future map {
       items => Some(items)
   } recover {
       case timeout: java.util.concurrent.TimeoutException => None
   }
   Await.result(future, 5000 millis);
};

Be careful to execute blocking Futures in their own executor, otherwise you end up blocking other parallel computation.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!