在scala中用Future替换while循环
发布时间:2020-12-16 18:54:52 所属栏目:安全 来源:网络整理
导读:我有一个返回值为Future [Int]的函数 def func: Future[Int] = {...} 我将定期检查func的返回值,直到它满足某些条件(例如返回值大于10),然后我将使用此返回值来创建map / flatmap的其他未来值. 如何在没有任何同步代码的情况下完成这项工作?如下所列: def
我有一个返回值为Future [Int]的函数
def func: Future[Int] = {...} 我将定期检查func的返回值,直到它满足某些条件(例如返回值大于10),然后我将使用此返回值来创建map / flatmap的其他未来值. 如何在没有任何同步代码的情况下完成这项工作?如下所列: def check: Future[Int] = { var ret: Int = Await.result(func,Duration.Inf) while (ret <= 10) { ret = Await.result(func,Duration.Inf) } Future(ret + 100) } 解决方法
实现此目的的一种方法是使用递归,如下所示.
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future def check(func: () => Future[Int]): Future[Int] = { Future.unit.flatMap(_ => func()) flatMap { case x if x <= 10 => check(func) case x => Future.successful(x + 100) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容