这个简化的情况是我的问题发生的地方......
object Main extends IOApp{
def run(args:Seq[String]): IO[ExitCode]={
Task{...}
.to[IO]
.as(ExitCode.Success)
}
}
另一种选择是Await.result(task)
,但这听起来不太符合IOApp
的做法。
我所知道的
根据这篇伟大的帖子 Monix vs 猫效应
我看到Task
IO
之间的差异是:
Task
API 比IO
更丰富Task
线程调度公平性更智能、更自动Task
获得更多可取消的选项- 以及更多...
问题和我的意见
将Monix
Task
转换为Cats
IO
后我失去了什么?
它似乎工作正常,Task.gather
和timeout
- 所有这些特定于任务的东西.
所以我在转换中丢失了什么?
如果没有,那么没有理由创建多个数据类型。
所以考虑到差异,这意味着我在与IO
交谈后失去了Task
的调度公平性?
好吧,我应该自己验证它,但我不知道如何测试它的公平性。
Monix Task没有针对cats-effect 3进行更新,也不太可能更新,所以在这一点上这是一个有争议的问题 - 如果你想使用当前的生态系统,你使用IO
monix作者是猫效应的主要贡献者,在这一点上,monix 任务中几乎没有功能,这些功能也无法通过 IO 完成。