问题描述
我正在尝试使用 monix 来并行化某些操作,然后执行错误处理
假设我正在尝试解析和验证这样的几个对象
def parseAndValidateX(x: X) Task[X]
和
def parseAndValidateY(y: Y): Task[Y]
这里的 X 和 Y 是我定义的一些类型。
现在这些方法中的每一个都会评估一些标准并返回一个任务。如果评估失败,我有一些形式的代码
Task.raiseError(new CustomException("X is invalid because certain reasons a,b,c"))
我对 Y 有类似的任务加薪。
Task.raiseError(new CustomException("Y is invalid because certain reasons a',b',c'"))
现在我有这种类型
case class Combined(x: X,y: Y)
我定义了这个
private def parseAndValidateCombined(x: X,y: Y): Task[Combined] = {
val xTask = parseAndValidateX(x)
val yTask = parseAndValidateY(y)
Task.parMap2(xTask,yTask) {
(xEval,yEval) => SecretData(xEval,yTask)
}
}
这应该允许我并行运行验证,并且我确实得到了响应。
不过我也想要这种行为
如果两个任务都失败,我想返回这样的错误
Task.raiseError(new CustomException("X is invalid because certain reasons a,c and "Y is invalid because certain reasons a',c'"))
我似乎无法做到这一点。根据两个任务中的哪一个失败,我只能在 parMap2 输出的 onRecover 方法上获得两个失败之一。
如果两者都失败,我只会收到任务 X 的错误。
我是否有可能以完全异步的方式使用 Monix 完成我正在做的事情(例如,也许可以使用其他方法将任务组合在一起)?或者我是否必须阻止 exec,单独获取错误并重新组合值?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)