You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Monix中Task.parSequenceUnordered返回结果顺序不符合预期的疑问

Monix中Task.parSequenceUnordered返回结果顺序不符合预期的疑问

我之前看到Task.parSequenceUnordered的官方说明是:

"is like parSequence, except that you don’t get ordering for results or effects."

也就是它不会保证结果或者副作用的顺序。那按照这个描述,我写了下面这段代码,原本以为会返回List(2, 1),但实际运行下来结果却是List(1, 2),用异步执行的方式也没改变这个结果,想请熟悉Monix的朋友帮忙解惑一下,谢谢!

首先是同步执行的代码:

import monix.eval.Task
import monix.execution.Scheduler.Implicits.global

object TaskSequence extends App {

  val taskOne = Task {
    Thread.sleep(3000)
    println("First executed")
    1
  }

  val taskTwo = Task {
    Thread.sleep(2000)
    println("Second executed")
    2
  }

  val parallelUnordered = Task.parSequenceUnordered(List(taskOne, taskTwo)).runSyncUnsafe()
  println(s"Return vals for Task.parSequenceUnordered( ) were $parallelUnordered")
}

运行这段代码时,taskTwo只需要休眠2秒,会比taskOne先完成——控制台确实会先打印Second executed,再打印First executed,但最终返回的结果列表却是List(1, 2),这和我预期的按任务完成顺序返回结果不一样。

我又试了异步执行的方式,结果还是一样:

Task.parSequenceUnordered(List(taskOne, taskTwo)).runAsync( result => result match {
  case Right(value) => println(value)
  case Left(value) => value
})

Thread.sleep(5000) // 防止程序提前退出

按道理,先完成的任务应该先出现在结果列表里才对,为什么实际不是这样呢?有没有Monix的专家能帮忙解释下这个问题?

备注:内容来源于stack exchange,提问作者Zeke1999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:12:35