- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我正在研究Scala Future,以及在Future/Promises中获取内部数据的方法。所以我写了所有内容我所了解的模型,获取Scala Futures的内部数据。
我们总是看到这两种情况:
1- 有时我们会在异步函数 block 中获取 future 的内部数据,例如map,flatMap,foreach,fold,...
2-有时我们会在 Future 中得到结果,例如使用 Await
在此示例中,我使用 Akka
?
或 ask
函数(它是异步的),并且我尝试了解最佳实践如何得到 future 的结果
1- 出 block ?
2- 进入阻止?
Await
、Sleep
等)都是不好的。请帮助我找到最佳实践,替换 Await
或 Future.value.get.get
Tnx!!!
这是我的代码示例:
//Main Problem
val futureResult: Future[String] = (ping ? AskingTest).mapTo[String]
//Solution number 1
val awaitResult = Await.result(futureResult, myTimeout)
println(s"(1): $awaitResult")
//Solution number 2
val eitherResult: Either[Throwable, String] = Await.ready(futureResult, myTimeout).value.get match {
case Success(str) => println(s"(2): $str");Right(str)
case Failure(err) => println(s"(2): $err");Left(err)
}
//Solution number 3 ***low speed***
import scala.concurrent.ExecutionContext.Implicits.global
//BadPractice: Writ in play documentation.
futureResult map { x: String =>
println(s"(3): $x")
}
//Solution number 4
futureResult.value.get match {
case Success(str) => println(s"(4): $str")
case Failure(err) => println(s"(4)$err")
}
//Solution number 5
futureResult onComplete {
case Success(str) => println(s"(5): $str")
case Failure(err) => println(s"(5): $err")
}
最佳答案
最佳实践是“在世界末日”进行 Await。这意味着您应该将所有 future 合并到一个 future 中,然后仅等待一次。
val f1 = (ping1 ? AskingTest).mapTo[String]
val f2 = (ping2 ? AskingTest).mapTo[String]
val combinedFuture: Future[(String, String)] = for {
str1 <- f1
str2 <- f2
} yield (str1, str2)
// final await at the end of program
val (str1, str2) = Await.result(combinedFuture, Duration.Inf)
当我开始使用 Futures 编写代码时,我曾经在每一行都编写 Await。这是错误的,因为它违背了使用 Future 的目的。
因此,您的目标是使用 for
组合尽可能多的 future,然后仅等待一次。
除了第 4 种之外,您上面列出的其他解决方案也都可以,因为如果 future 尚未完成,它可能会导致您的程序崩溃。
关于scala - 获取 Scala Future 的内部数据 **最佳案例**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49920677/
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
我正在尝试做类似的事情: SELECT SUM( CASE WHEN ( AND EXISTS(SELECT 1
我想问如何在外部 ng-repeat 内部正确使用内部 ng-repeat: 这意味着你想使用这样的东西: {{milestone.id}} {{
我希望在 wordpress 的仪表板内编辑 css 样式并且如果可能的话不必编辑 php 文件。 我知道至少可以编辑一些属性,所以我希望我可以直接在仪表板中编辑所有属性。 更具体地说如何更改自定义类
我在安装在 windows10 上的 vmware 中的 Ubuntu 上安装了伪分布式独立 hadoop 版本。 我从网上下载了一个文件,复制到ubuntu本地目录/lab/data 我在 ubun
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
在我的一些测试帮助程序代码中,我有一个名为 FakeDbSet(Of T) 的 IDbSet(Of T) 实现,它模拟了许多 EF 行为,但没有实际的数据库。我将类声明为 Friend ,因为我想强制
我正在寻找 Cassandra/CQL 的常见 SQL 习语 INSERT INTO ... SELECT ... FROM ... 的表亲。并且一直无法找到任何以编程方式或在 CQL 中执行此类操作
如何防止内部 while 循环无限运行?问题是,如果没有外部 while 循环,内部循环将毫无问题地运行。我知道它必须对外循环执行某些操作,但我无法弄清楚是什么导致了问题。 import java.u
我正在努力学习更多有关 C++ 的知识,但在国际象棋程序中遇到了一些代码,需要帮助才能理解。我有一个 union ,例如: union b_union { Bitboard b; st
这是我项目网页中的代码片段。这里我想显示用户选择的类别,然后想显示属于该类别的主题。在那里,用户可以拥有多个类别,这没有问题。我可以在第一个 while 循环中打印所有这些类别。问题是当我尝试打印主题
我想知道如何在 swing 中显示内部框架。这意味着,当需要 JFrame 时,通常我所做的是, new MyJFrame().setVisible(true); 假设之前的表单也应该显示。当显示这个
我最近发现了一些有趣的行为,这让我想知道对象如何知道存在哪些全局变量。例如,假设我有一个文件“test.py”: globalVar = 1 toDelete = 2 class Test(objec
我知道它已经在这里得到回答: google maps drag and drop objects into google maps from outside the Map ,但这并不完全是我所需要的
我目前正在学习Javascript DOM和innerHTML,发现在理解innerHTML方面存在一些问题。 这是我的代码:http://jsfiddle.net/hphchan/bfjx1w70/
我构建了一个布局如下的库: lib/ private_class_impl.cc private_class_decl.h public_class_impl.cc include/
我有一个使用 bootstrap 3 的组合 wordpress 网站。它基本上是一个图像网格。当屏幕展开时,它会从三列变为四列。移动时它是一列。 我想出了如何调整图像的顶部和底部边距,但我希望图像的
我正在试用 MSP-EXP430G2 的教程程序,使用 Code Composer Studio 使 LED 闪烁。最初,它有一个闪烁的无限循环: for(;;) // This emp
我是一名优秀的程序员,十分优秀!