尝试创建CoordinatedShutdown帮助器功能

问题描述 投票:0回答:1

我有一个函数,它将使用CoordinationShutdown流进行一些清理代码。

 def shutdown(cs: CoordinatedShutdown, makePhase: CoordinatedShutdown.type => String, name: String)
    (f: () => Funit): Unit = {

      val phase = makePhase(CoordinatedShutdown)
      val msg = s"$phase $name"
      cs.addTask(phase, name) { () =>
        logger.info(msg)

        f()        
      }
  }

当前错误是:

type mismatch;
 found   : scala.concurrent.Future[Unit]
 required: scala.concurrent.Future[akka.Done]bloop

如何调用我的未来函数f(),然后使用Futures返回akka.Done返回类型?

我尝试过:

f()andThen(akka.Done)

但是后来我得到了错误:

found   : akka.Done.type
 required: PartialFunction[scala.util.Try[Unit],?]

有人可以澄清我做错了什么,应该做些什么?

scala akka
1个回答
0
投票

您可以使用Future.map方法将返回的Future的值转换为Future.map

Done

这类似于f().map(_ => Done) ,因为它在原始andThen完成后会执行回调,但有两个重要区别:

  1. Future方法不会更改返回的andThen的值,因此无法根据需要将其用于将其转换为另一种类型。
  2. Future回调仅在原始map成功完成时执行,否则将通过原始失败,而Future回调应处理成功或失败结果。

这些只是Scala andThen对象上可用的几种操作中的两种。有关更完整的概述,请参见Future上的Scala文档。 Futures and Promises上的一系列帖子中有更深入的讨论。

© www.soinside.com 2019 - 2024. All rights reserved.