当前位置: 首页 > 知识库问答 >
问题:

Scala中带有futures的异步IO

孟成文
2023-03-14
import scala.actors.Futures._

// Retrieve URLs from somewhere
val urls: List[String] = ...

// Download image (blocking operation)
val fimages: List[Future[...]] = urls.map (url => future { download url })

// Do something (display) when complete
fimages.foreach (_.foreach (display _))
    null

共有1个答案

鲜于念
2023-03-14

在Scala2.10中使用Futures。他们是Scala团队、Akka团队和Twitter之间的联合工作,以达成一个更标准化的未来API和实现,供跨框架使用。我们刚刚在以下网址发布了一份指南:http://docs.scala-lang.org/overviews/core/futures.html

除了完全非阻塞(默认情况下,尽管我们提供了执行托管阻塞操作的能力)和可组合性之外,Scala2.10的futures还提供了一个隐式线程池来执行您的任务,以及一些用于管理超时的实用程序。

import scala.concurrent.{future, blocking, Future, Await, ExecutionContext.Implicits.global}
import scala.concurrent.duration._

// Retrieve URLs from somewhere
val urls: List[String] = ...

// Download image (blocking operation)
val imagesFuts: List[Future[...]] = urls.map {
  url => future { blocking { download url } }
}

// Do something (display) when complete
val futImages: Future[List[...]] = Future.sequence(imagesFuts)
Await.result(futImages, 10 seconds).foreach(display)

上面,我们首先导入了一些东西:

    null
 类似资料:
  • 我正在尝试进行大量的外部服务调用,每个调用都遵循异常处理和有条件的进一步处理。我认为使用内部的. on完成来扩展这个不错的(Scala中带有期货的异步IO)示例会很容易,但似乎我对范围和/或期货有些不理解。有人能给我指出正确的方向吗? 在我的电脑上(Scala 2.10.4 ),这打印出来: 我要(顺序不重要):

  • 是否有可能将 scala.util.Try 和 scala.concurrent.Future 链接起来?它们都有效地提供了相同的一元接口,但尝试链接它们会导致编译错误。 例如。给定以下两个签名 有可能做以下事情吗? 这显然会导致编译错误,因为Future和Try不能被平面映射在一起。 然而,能够链接它们将是一个很好的功能 - 这有可能吗?还是我需要将它们组合成一个未来[尝试[字符串]]? (特别

  • 有一个方面的未来,我不完全理解从官方教程参考。http://docs.scala-lang.org/overviews/core/futures.html scala中的期货是否有某种内置的超时机制?假设下面的示例是一个5GB的文本文件...“Implicits.global”的隐含范围最终会导致onFailure以非阻塞方式触发还是可以定义?如果没有某种默认的超时,这是否意味着成功或失败都不会触

  • 如果 Scala 未来失败,并且没有延续“观察到”该故障(或者唯一的延续使用 map/flatMap 并且在发生故障时不运行),那么错误就不会被发现。我希望至少记录这些错误,以便我可以找到错误。 我使用术语“观察到的错误”,因为在.Net Tasks中,当GC收集Task对象时,有机会捕获“未观察到的任务异常”。同样,使用同步方法,可以记录终止线程的未捕获异常。 在Scala futures中,“

  • 我想并行处理一个集合,但我在实现它时遇到了困难,因此我希望得到一些帮助。 foreach方法的原型采用作为参数,但我希望它等待异步lambda。

  • 我需要有一个长时间运行的websocket客户端,它接收来自websocket服务器的推送消息,并且我需要监视客户端的连接状态:如果连接中断,我需要发现。 我的方法是定期记录一个常量字符串,如果没有检测到日志消息,就触发警报。 我的想法是:1)有一个websocket客户机来响应不定期传入的消息。2)同时有一个循环,当websocket客户机抛出一个ConnectionClosed exeptio