在PR审查期间,我被要求将Sync[F].delay
替换为Sync[F].catchNonFatal
,因为可能会抛出异常 。
这确实有效:
scala> Sync[IO].delay(throw new Exception).recover{ case t: Throwable => 42 }.unsafeRunSync
res10: Int = 42
不确定该行为是否特定于IO
,我也能够找到corresponding law saying it's actually expected,但是在cats-effect主文档中找不到关于自动处理异常的内容API。
有人知道猫的作用原理和预期的行为吗?在.delay
或.map
或.flatMap
中抛出异常?