Scala Future OnComplete调用 笔记


在并发Future中建立API调用,和主线程并发地执行任务

  /*
  调用远程API,获得传入城市的温度
   */
  def cityTemp(name:String):Double = {
    val url = "http://api.openweathermap.org/data/2.5/weather"
    val cityUrl = s"$url?q=$name&APPID=981224145dabaaf57b51ff469e7f1acd"
    val json = io.Source.fromURL(cityUrl).mkString
    val pattern = """.*"temp":([\d]+).*""".r
    val pattern(temp) = json
    temp.toDouble
  }

import concurrent.Future
import concurrent.ExecutionContext.Implicits.global
import scala.util.Success

  def main(args:Array[String]):Unit = {

    //调用Future.sequence 并发执行Future
    val cityTemps:Future[Seq[Double]] = Future sequence Seq(
      Future(cityTemp("Fresno")),Future(cityTemp("Tempe"))
    )

    //Future回调函数,当Future执行完成,会自动调用这个函数,输出函数结果
    cityTemps onComplete {
      case Success(Seq(x, y)) if x > y => println(s"Fresno is warmer: $x K")
      case Success(Seq(x, y)) if y > x => println(s"Tempo is warmer: $y K")
    }

    //OnComplete调用对变量的影响
    var temp = 0.0d;
    cityTemps onComplete {
      case Success(Seq(x, y)) if x > y => temp = x
      case Success(Seq(x, y)) if y > x => temp = y
    }

    //主线程继续执行,为了看到OnComplete的执行结果,等待10秒
    //temp before complete: 0.0
   println("temp before complete: " + temp)
    Thread.sleep(10000)
    //temp after complete: 294.0
    println("temp after complete: " + temp)
    println("result complete")

  }


 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值