如何恢复失败的任务?

How to Recover on a Failed Task?

鉴于:

import scalaz.concurrent.Task
import scalaz._

val result: Task[String \/ Int] = Task { throw new RuntimeException("!")}

然后,我运行它得到一个RuntimeException:

scala> result.unsafePerformSync
java.lang.RuntimeException: !
...

Task 是否有 "equivalent" Future#recover,即类似下面的内容?

def recover[A, B, C](t: Task[A], handleError: Throwable => B \/ C]: Task[B \/ C]

Task#handle(或者 handleWith)可以解决问题

  def f: String = {
    throw new RuntimeException()
    "I will fail"
  }
  Task(f).handle{ case _ ⇒ "recovered"}.run \ recovered