加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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)
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读