GroupBy然后ObserveOn丢失项目

| 在LinqPad中尝试以下操作:
Observable
    .Range(0, 10)
    .GroupBy(x => x % 3)
    .ObserveOn(Scheduler.NewThread)
    .SelectMany(g => g.Select(x => g.Key + \" \" + x))
    .Dump()
结果显然是不确定的,但是在每种情况下我都无法收到全部10个项目。我当前的理论是,随着管线向新线程封送,这些项目将通过可观察的分组进行观察。     
已邀请:
        Linqpad不知道您正在运行所有这些线程-它会立即到达代码的末尾(请记住,Rx语句并不总是同步动作,这就是主意!),等待几毫秒,然后通过吹掉AppDomain及其所有线程(尚未捕获)结束。尝试在末尾添加Thread.Sleep,以使新线程有时间赶上。 顺便说一句,Scheduler.NewThread是一个非常低效的调度程序,EventLoopScheduler(仅创建一个线程)或Scheduler.TaskPool(使用TPL池,就像您为每个项目创建了Task一样)效率更高(当然在此情况下)的情况下,因为您只有10个项目,最好使用Scheduler.Immediate!)     
        在这里看来,问题出在开始在GroupBy操作中开始对新组的订阅与延迟实施新订阅之间的时间上。如果将迭代次数从10增加到100,则一段时间后应该会开始看到一些结果。 另外,如果将GroupBy更改为.Where(x => x%3 == 0),则可能会注意到没有值丢失,因为对IObservable组的动态订阅不需要初始化新的观察者。     

要回复问题请先登录注册