Scala Future 上的等待会阻塞线程吗?

2023-12-30

When I wait对于 Scala Future 的结果,它的行为是否更像receive,或者像react,即它是否会阻塞线程,或者在结果可用时安排继续操作?


是的,在 stdlib 中它会阻塞线程,并同步等待结果。如果你想对 futures 应用连续传递风格,你必须使用 Akka 或 Scalaz,它们允许直接从盒子里添加有关 futures 完成的钩子。

Akka http://doc.akka.io/futures-scala:

val f1 = Future { Thread.sleep(1000); "Hello" + "World" }

val f2 = f1 map { _.length }

f2 foreach println //Done asynchronously and non-blocking

与相同Scalaz http://code.google.com/p/scalaz/:

scala> val f1 = promise {Thread.sleep(1000); "Hello" + "World"}
f1: scalaz.concurrent.Promise[java.lang.String] = scalaz.concurrent.Promise$$anon$1@1f7480

scala> val f2 = f1 map{str => str.length}
f2: scalaz.concurrent.Promise[Int] = scalaz.concurrent.Promise$$anon$1@1d40442

scala> f2.map(println)
10
res5: scalaz.concurrent.Promise[Unit] = scalaz.concurrent.Promise$$anon$1@116ad20
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala Future 上的等待会阻塞线程吗? 的相关文章

  • Scala 中的超时未来

    假设我有一个函数 它调用一个阻塞可中断的手术 我想在超时的情况下异步运行它 也就是说 我想在超时到期时中断该功能 所以我正在尝试做这样的事情 import scala util Try import scala concurrent Fut
  • 返回承诺与在承诺内返回未定义之间的区别

    我不太确定我是否理解这两种常见场景之间的区别 假设我们有这个 user save then function val anotherPromise1 val then function val anotherPromise2 val cat
  • ExpressJS 后端将请求放入队列

    我有客户端发送要由服务器执行的任务 但这些请求应该以类似队列的方式处理 知道我该怎么做吗 谢谢 express Router post tasks function req res This is the task to perform W
  • 在 Node.js 中一次迭代 50 个项目的数组

    我是 node js 的新手 目前正在尝试编写数组迭代代码 我有一个包含 1 000 个项目的数组 由于服务器负载问题 我想一次迭代 50 个项目的块 我目前使用 forEach 循环 如下所示 我希望将其转换为上述块迭代 result i
  • 通过spark-shell以静默模式执行scala脚本

    需要通过spark shell以静默模式执行scala脚本 当我使用时spark shell i file scala 执行后 我进入scala交互模式 我不想进入那里 我尝试执行spark shell i file scala 但我不知道
  • Spark SQL中如何按列降序排序?

    I tried df orderBy col1 show 10 但它是按升序排列的 df sort col1 show 10 也按升序排序 我查看了 stackoverflow 发现的答案都已过时或称为 RDD https stackove
  • 组合多个任意长度的列表

    我正在寻找一种通过以下方式加入多个列表的方法 ListA a b c ListB 1 2 3 4 ListC Resulting List a 1 b 2 c 3 4 换句话说 元素按顺序排列 从第一个列表开始组合到结果列表中 任意数量的输
  • Scala 函数定义参数列表中不同的括号样式

    Scala 中以下两个函数定义有什么区别 1 def sum f Int gt Int a Int b Int Int code 2 def sum f Int gt Int a Int b Int Int code SBT 的控制台 RE
  • 为什么我的代码在 Spark Pregel 中执行需要很长时间?

    我在 Spark 中使用 Pregel 编写了处理图形的代码 但对于小数据集来说 它的执行速度非常非常慢 我以前用pregel写过程序 但是这段代码运行速度确实很慢 我的集群由 2 个工作人员组成 每个都有核心 i5 CPU 和 6 GB
  • 有没有好的 Clojure 基准测试?

    Edit Clojure 基准测试已达到基准游戏 http benchmarksgame alioth debian org u64q clojure html 我已经制作了这个问题社区维基并邀请其他人保持更新 有人知道 Clojure 性
  • 如何使用 Promise.all 获取 URL 数组?

    如果我有一个 url 数组 var urls 1 txt 2 txt 3 txt these text files contain one two three respectively 我想构建一个如下所示的对象 var text one
  • 以小并发批量运行 Promise(一次不超过 X)

    Async 库具有类似的功能每个限制 https github com caolan async eachLimit它可用于将大量作业有效地分布在多个 CPU 核心上 如下所示 var numCPUs require os cpus len
  • 如何通过 Scala REPL 使用第三方库?

    我已经下载了Algebird我想尝试一些事情Scala 解释器使用这个库 我该如何实现这一目标 当然 您可以使用 scala cp 无论如何并手动管理您的依赖项 但这变得非常乏味 尤其是当您有多个依赖项时 更灵活的方法是使用sbt http
  • 将额外的参数传递给多态函数?

    我有一个多态函数 可以将列表转换为集合 import shapeless PolyDefns gt import shapeless val lists List 1 2 List A B List 1 1 2 2 HNil object
  • 在 scala 中保留推导的更高类型

    我有一个高阶类型 并致力于用它构建一些 DSL 我正在寻找一种方法来定义可以接受类型而无需显式指定此类型的函数 自我描述示例 class Wrap T val data T class DSL def doSomething T x Wra
  • 内存泄漏在哪里?

    我使用 InetAddress 来解析 IP 地址 但现在如果 IP 不可用 则需要存储主机名 所以我介绍了一个班级Host case class Host name String ip InetAddress import Host ad
  • 如何列出所有 sbt 依赖项?

    我需要列出所有 sbt 依赖项 以便检查是否已存在 debian 软件包 我还注意到有一个 DEB 包 http www scala sbt org 0 13 tutorial Installing sbt on Linux html但似乎
  • 获取两个顶点之间的边属性值时出现 ClassCastException

    我正在尝试获取两个顶点之间的边缘属性值并低于异常 java lang ClassCastException 无法将 java lang String 转换为 scala runtime Nothing 环境 内存中的泰坦 Code val
  • 解析:Promise.when 有很多 Promise?

    解析文档 https www parse com docs js symbols Parse Promise html when https www parse com docs js symbols Parse Promise html
  • 带可变参数的 Spark UDF

    如文档中所示 列出最多 22 个参数是唯一的选择吗 https spark apache org docs 1 5 0 api scala index html org apache spark sql UDFRegistration ht

随机推荐

  • 如何更改 Braintree 上的订阅期限?

    我想为我们使用 Braintree 的计费系统添加一些单元测试 但我不知道如何将订阅期从 1 个月 目前 Braintree 中的最小值 更改为 1 天 我等不及 1 个月来执行我的测试 有什么解决办法吗 我最近向 Braintree 支持
  • 如何检查哈希中是否存在特定密钥?

    我想检查会话哈希中是否存在 用户 密钥 我怎样才能做到这一点 请注意 我不想检查键的值是否为零 我只是想检查 用户 是否key存在 Hash s key 方法告诉您给定的密钥是否存在 session key user
  • 如果非最终字段的值可以更改,如何在匿名类中使用它们?

    我之前问过这个问题 但没有得到合适的答案 如果非最终字段的值可以更改 如何在匿名类中使用它们 class Foo private int i void bar i 10 Runnable runnable new Runnable publ
  • Fragment 变得可见时的侦听器

    我疯狂地尝试让 optionsMenu 为不同的视图提供不同的选项 如果在我的片段上调用 onResume 我可以让它工作 但事实并非如此 我有一个 SherlockFragmentActivity 它在 onCreate 期间添加一个 S
  • Task 与 C# 中的异步委托?

    我有这个简单的方法 static int Work string s return s Length 我可以用以下命令运行它 Task
  • 如何向属性添加方法?

    假设我创建一个具有属性的类 public class User private string userID public string UserID get return userID set userID value 我必须如何处理类和属
  • 通过魔术方法访问 PhpStorm 字段

    我已在 CodeIgniter 库文件夹中点燃了数据表库 库中的一些代码 class Datatables Global container variables for chained argument results protected
  • HTTP 处理程序加载错误

    我在 Asp Net 中成功添加并配置了 HttpHandlerWeb应用程序 但在尝试将相同的 HttpHandler 添加到 Asp Net 时遇到问题WebSite 我已经在 web config 中注册了它 我是否遗漏了一些东西 这
  • 参与开源项目最重要的一点是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 免责声明 我did检查其他似乎相关的问题 但是这个问题更广泛且不太具体 其目标也完全不同 因此 请在删除之前先阅读 现在 虽然有 如何以聪明的方
  • Stream 的头部到底什么时候被评估?

    通常如果你创建一个Stream对象 头部将被急切地求值 scala gt Stream println evaluating 1 1 2 3 evaluating 1 res63 scala collection immutable Str
  • 当 JVM 终止时会发生什么?

    当 JVM 终止时会发生什么System exit 0 or C或者类似的东西 我读到诸如 进程被吹走 和 每个线程都停止 之类的内容 但我想知道到底发生了什么 我已经知道有shutdownHook以某种方式仍然会被执行 但是在调用 shu
  • 查找并替换某个范围内所有出现的字符串

    我想基本上模拟 VBA 中 Excel 中的替换所有功能 并将字符串 03 01 2018 在本工作簿中存在 10 次 替换为 01 03 2017 我已经弄清楚如何在一次出现时执行此操作 但是不是范围内的所有出现 有类似 findnext
  • 类型“AngularFireUploadTask”上不存在属性“downloadURL”

    我的线路有问题 this downloadURL 任务 downloadURL 使用 AngularFireUploadTask 即使我导入了它 import Component OnInit from angular core impor
  • 如何使用 jedis for Java 连接 Docker Redis 集群实例?

    我使用 redis docker compose 创建了一个包含 6 个节点的集群 3 个主节点和 3 个从节点 并将所有节点链接起来 集群信息 cluster state ok cluster slots assigned 16384 c
  • Nodejs 中的 C scanf 等效项

    如果我想从输入流中读取C我写的scanf 是否有等效方法NodeJS做同样的事 例如 这是以下代码C int n m i scanf d n for i 0 i lt n i scanf d m 这是我在 Node 中开始的地方 TODO表
  • 如何在长按列表项时显示按钮

    我需要在长按列表项时显示删除按钮 我已经获得了长按的代码 但不知道如何编写代码以在长按内显示按钮 终于得到答案了 xml 文件
  • Xcode 3 中的 Xcode 4 NSLog 宏链接

    在XcodeNSLog声明 我可以输入 我想 使用我的运动记忆 log control 代码完整 宏可以 NSLog 是光标 Xcode 4 中有类似的东西可以完成这个任务吗 Thanks Ross 我也很怀念这个宏 谢谢Kendall h
  • 如何启用 Lollipop 中引入的新蓝牙 A2DP 接收器功能?

    我正在尝试修改 Nexus 5 的 AOSP android 映像以包括对蓝牙 A2DP 接收器的支持 我发现 Google 非常友善 为 Nexus 5 提供了一个隐藏的构建目标 https android googlesource co
  • 单击按钮上的 Dash 下载内存中生成的文件:如何给出文件名?

    我生成一个在记忆中Excel 文件通过pd ExcelWriter and BytesIO我的 Python3 8 dash 应用程序中的点击事件 一切都按其应有的方式进行 当我下载文件时 我收到此弹出消息 询问我是否要继续下载 打开生成的
  • Scala Future 上的等待会阻塞线程吗?

    When I wait对于 Scala Future 的结果 它的行为是否更像receive 或者像react 即它是否会阻塞线程 或者在结果可用时安排继续操作 是的 在 stdlib 中它会阻塞线程 并同步等待结果 如果你想对 futur