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

用Java组成阿卡可能失败的未来

殷宇
2023-03-14

我试图在我自己的应用程序中应用未来合成的概念。根据Akka文档,您可以这样做(http://doc.akka.io/docs/akka/snapshot/java/futures.html):

final ExecutionContext ec = system.dispatcher();
//Some source generating a sequence of Future<Integer>:s
Iterable<Future<Integer>> listOfFutureInts = source;

// now we have a Future[Iterable[Integer]]
Future<Iterable<Integer>> futureListOfInts = sequence(listOfFutureInts, ec);

// Find the sum of the odd numbers
Future<Long> futureSum = futureListOfInts.map(
     new Mapper<Iterable<Integer>, Long>() {
          public Long apply(Iterable<Integer> ints) {
              long sum = 0;
              for (Integer i : ints)
                   sum += i;
              return sum;
         }
     }, ec);

futureSum.onSuccess(new PrintResult<Long>(), system.dispatcher());

请记住,我正在使用Akka的Java版本进行开发,因为我对Scala不够熟悉。当你想创作成功的未来作品时,这个方法很好用。在这里,您只是将所有期货(INT)的结果进行汇总,并将其相加,然后将其结果放入另一个可以稍后处理的未来。现在,如果其中一个期货可能失败,即抛出异常,会发生什么。当然,对于任何一个特定的未来,您都可以使用“onFailure”回调来处理失败,但我还没有找到一种在编写futures时处理失败的方法。

最好的方法是什么?我应该完全应用另一个概念吗?

谢谢

共有1个答案

胡和煦
2023-03-14

您正在查找recoverrecoverWith,如下所述:http://doc.akka.io/docs/akka/2.3.2/java/futures.html#Exceptions

final ExecutionContext ec = system.dispatcher();

Future<Integer> future = future(new Callable<Integer>() {
  public Integer call() {
    return 1 / 0;
  }
}, ec).recover(new Recover<Integer>() {
  public Integer recover(Throwable problem) throws Throwable {
    if (problem instanceof ArithmeticException)
      return 0;
    else
      throw problem;
  }
}, ec);

future.onSuccess(new PrintResult<Integer>(), system.dispatcher());
 类似资料:
  • 我有一个未来[T],我想在成功和失败上映射结果。 比如说 如果我使用< code>map或< code>flatmap,它将只映射成功的未来。如果我使用< code>recover,它将只映射失败的期货。< code>onComplete执行回调,但不返回修改后的未来值。< code>Transform可以工作,但是需要两个函数而不是一个部分函数,所以有点难看。 我知道我可以做出一个新的,并用或/

  • 问题内容: 我有一个项目{a,b,c,d}的列表,当我需要生成所有可能的组合时, 您可以选择任意数量的项目 顺序不重要(ab = ba) 空集不被考虑 如果我们抓住可能性,那就应该是 我使用了以下递归方法: 当数组大时,有没有更有效的方法? 问题答案: 将组合视为一个二进制序列,如果所有4个都存在,则得到1111,如果缺少第一个字母,则得到0111,依此类推。对于n个字母,我们将得到2 ^ n -

  • 尝试使用React-Native run-android命令在我的Android手机上运行React-Native导致以下错误。我有必要的SDK,软件包等,我找不到任何解决这个错误的谷歌。

  • 问题内容: 在清理这个答案时,我对MySQL和s和存储过程有了一些了解,但感到震惊的是,尽管and 触发器可以修改数据,但它们似乎不会导致插入/更新失败(即验证)。在这种特殊情况下,我可以通过处理数据以导致主键重复的方式来使其工作,这在这种特殊情况下是有道理的,但在一般意义上不一定有意义。 这种功能在MySQL中可行吗?在其他RDBMS中(可悲的是,我的经验仅限于MySQL)?也许是样式语法? 问

  • 下面是DES加密代码。我收到错误0x6999:“小程序选择失败”。 那就奇怪了,因为没有try/get块中的初始化代码,选择小程序是没有问题的。 我的脚本文件(APDU脚本)是 请指导我哪里出了问题,因为我是新来的Java卡编程 谢谢

  • 在Scala中,未来可能会失败,这可以异步发现: 你将如何“翻译”成Clojure?我的阅读让我相信Clojure未来/promise模型没有Scala的强大,你不能就这样抓住失败。那么该怎么办呢? Scala的未来永远不需要被问到它的价值——当它好并准备好时,它会告诉你发生了什么(包括它是否失败——这是这个问题的关键)。这就是我所说的“异步”的意思。Scala的未来可以处于三种可能的状态之一——