RxJava3 RxImmediateSchedulerRule ExecutorScheduler公平参数

问题描述

使用调度程序进行测试的RxJava规则为

import io.reactivex.Scheduler
import io.reactivex.android.plugins.RxAndroidplugins
import io.reactivex.internal.schedulers.ExecutorScheduler
import io.reactivex.plugins.RxJavaPlugins
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import java.util.concurrent.Executor

class RxImmediateSchedulerRule : TestRule {

    private val immediate = object : Scheduler() {

        override fun createWorker(): Worker {
            return ExecutorScheduler.ExecutorWorker(Executor { it.run() },true)
        }
    }

//    private val immediate = Schedulers.trampoline()

    override fun apply(base: Statement,description: Description): Statement {
        return object : Statement() {
            @Throws(Throwable::class)
            override fun evaluate() {
                RxJavaPlugins.setinitIoSchedulerHandler { immediate }
                RxJavaPlugins.setinitcomputationSchedulerHandler { immediate }
                RxJavaPlugins.setinitNewThreadSchedulerHandler { immediate }
                RxJavaPlugins.setinitSingleSchedulerHandler { immediate }
                RxAndroidplugins.setinitMainThreadSchedulerHandler { immediate }

                try {
                    base.evaluate()
                } finally {
                    RxJavaPlugins.reset()
                    RxAndroidplugins.reset()
                }
            }
        }
    }
}

现在有了RxJava3

ExecutorScheduler.ExecutorWorker(Executor { it.run() },true,true)

此处的第二个参数称为fair,但ExecutorScheduler类中没有JavaDoc或对此参数的解释。谁是合理的参数,何时应该使用?

解决方法

在ExecutorScheduler类中没有JavaDoc或对此参数的解释

那是因为ExecutorScheduler是一个内部类,不能直接使用。

Schedulers.from()的JavaDoc中解释了公平性。