Как выполнить код после исключения в Scala, используя Try

У меня есть два актера, которые могут либо вернуть Result, который является логическим значением в моем случае, либо они могут выдать исключение, вот мой код

val futureA: Future[Boolean] = ask(ActorA, MessageA(obj)).mapTo[Boolean]
val resultA = Await.result(futureA, timeout.duration) //can return boolean or throw an exception 

val futureB: Future[Boolean] = ask(ActorB, MessageB(obj)).mapTo[Boolean]
       val resultb = Await.result(futureB, timeout.duration)//can return boolean or throw an exception

Здесь я хочу достичь
сценарий-1, если futureA и FutureB преуспеют, я должен получить что-то вроде (futureResponseA,futureResponseB) //(true, true)

Сценарий 2, если в будущем A происходит сбой, он должен продолжить FutureB, если он вернется успешно, я должен получить что-то вроде (exceptionOfFutureA, resultofFutureB)

сценарий 3, если futureA вернется успешно, а futureB потерпит неудачу, я должен получить что-то вроде (futureResponseA, exceptionOfFutureB)

Сценарий 4, если futureA и futureB оба потерпели неудачу, я должен получить что-то вроде (exceptionOfFutureA, exceptionOfFutureB)

для этого я попытался с val futureA = ask(ActorA, MessageA(obj)).mapTo[Boolean] val futureB = ask(ActorB, MessageB(obj)).mapTo[Boolean]

  val f = Try {Future.sequence(List(futureA, futureB))}
  val result = Await.result(f, Duration.Inf)

но я получаю ошибку в этом val result линия

found   : scala.util.Try[scala.concurrent.Future[List[Boolean]]]
[error]  required: scala.concurrent.Awaitable[?]

Как я могу архивировать эти сканеры, пожалуйста, руководство

1 ответ

Решение

Try не является Awaitableи Future не будет выбрасывать исключение, но Await Можно. Так что вам нужно обернуть Await с Try и, поскольку вы хотите захватить один или оба сбоя, это означает, что 2 различных Awaits.

val resultTuple = (Try(Await.result(futureA, Duration.Inf))
                  ,Try(Await.result(futureB, Duration.Inf)))

Тип результата Tuple2[Try[Boolean],Try[Boolean]], который охватывает 4 сценария, которые вы изложили: (Успех, Успех) (Успех, Отказ) (Отказ, Успех) (Отказ, Отказ)

Другие вопросы по тегам