将RX迁移到协同程序

时间:2019-06-06 04:57:45

标签: kotlin rx-java coroutine kotlin-coroutines

我开始学习协程 这段代码在协程上是什么样的? 我想离开RX 并开始使用协程

open class DataState<out T>(val newState: T, val oldState: T?, val json: String)
object EventBus {
    private val dataPublisher: MutableMap<String, PublishSubject<DataState<Any>>> = mutableMapOf()

    inline fun <reified T : Any> fire(event: DataState<T>) = fire(T::class.java.name, event)
    fun <T : Any> fire(clazz: Class<T>, event: DataState<T>) = EventBus.fire(clazz.name, event)

    fun <T : Any> fire(className: String, event: DataState<T>) {
        synchronized(this) {
            dataPublisher[className]?.onNext(event)
        }
    }

    inline fun <reified T : Any> on(): Observable<DataState<T>> = on(T::class.java)

    fun <T> on(dataType: Class<T>): Observable<DataState<T>> {

        synchronized(this) {
            var pub = dataPublisher[dataType.name]

            if (pub == null) {
                pub = PublishSubject.create()
                dataPublisher[dataType.name] = pub
            }

            return pub.ofType(DataState::class.java) as Observable<DataState<T>>
        }
    }

    fun reset() {
        synchronized(this) {
            dataPublisher.values.forEach { it.onComplete() }
            dataPublisher.clear()
        }
    }
}

我真的不知道如何对协程做同样的事情,但我愿意接受这种改进的可能性。有人可以告诉我如何使用协同程序,并说明协同程序的方法有什么更好的方法吗?

0 个答案:

没有答案