什么是协程协程和线程的关系和Rxjava相对RxJava

什么是协程协程和线程的关系和Rxjava相对RxJava

什么是协程 协程和线程的关系

协程和线程,都能用来实现异步调用unity 协程和线程区别,但是这两者之间是有本质区别的

协程 VS Rxjava

协程相对RxJava有什么优点呢?

unity 协程和线程区别_unity协程会阻塞主线程吗_unity协程和线程的区别

RxJava比协程厉害的地方?

协程和Rxjava一样可以支持多个请求同步或异步处理

        mViewModel.getOrder(uuid).flatMap {
            mViewModel.queryClient(QueryRequest().apply {
                start = 0
                limit = 20
                filters.add(FilterParam("keyword:%=%", it.data?.customerName))
            })
        }.flatMap {
            if (it.data?.size == 0) {
                throw Throwable("这里抛出异常")
            } else {
                setCurClientData(ChooseClientWrapper(it.data?.get(0)))
            }
            mViewModel.queryGoods(QueryRequest().apply {
                filters.add(FilterParam("shopId:=", StorageMgr.getConfig(Constants.PS4_WosShop)))
                filters.add(FilterParam("customerId:=", mViewModel.curClient.get().data?.code))
                filters.add(FilterParam("wrhId:=", mViewModel.curWrh.get().data?.uuid))
                filters.add(FilterParam("skuId:in", arrayListOf<String>().apply {
                    mViewModel.goodsLines.forEach { goodsLine ->
                        add(goodsLine.gdGid.toString())
                    }
                }))
            })
        }
            .doOnSubscribe { showLoading() }
            .doAfterTerminate { hideLoading() }
            .bindLifeCycle(this)
            .subscribe({},{})

 mViewModel.listPictureParam.clear()
        Observable.fromIterable(mViewModel.listPictureCompress).concatMap {
            mViewModel.uploadImage(BOssImage().apply {
                name = FileUtils.getFileNameWithSuffix(it)
                ext = FileUtils.getSuffix(it)
                bytes = Base64.encodeToString(FileUtils.file2byte(it), Base64.DEFAULT)
            }).toObservable()
        }.map {
            mViewModel.listPictureParam.add(it.data?.url)
        }.count().flatMap {
            mViewModel.deliver(RfOrderDeliverReq().apply {
                orderId = mViewModel.uuid.get()
                if (mViewModel.carNumEdit.get() != null) {
                    carNumber = mViewModel.carNumEdit.get().trim()
                }
                if (mViewModel.remarkEdit.get() != null) {
                    remark = mViewModel.remarkEdit.get().trim()
                }
                vouchers.addAll(mViewModel.listPictureParam.map { it })
            })
        }.doOnSubscribe { showLoading() }
            .doAfterTerminate { hideLoading() }
            .bindLifeCycle(this)
            .subscribe({},{})

协程如何使用

       // Coroutines
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2' 

unity协程会阻塞主线程吗_unity协程和线程的区别_unity 协程和线程区别

CoroutineScope(Dispatchers.Main).launch{
}

这里涉及到2个新东西unity 协程和线程区别,第一个是 suspend 修饰符3D素材,另一个是 withContext 函数

unity 协程和线程区别_unity协程和线程的区别_unity协程会阻塞主线程吗

suspend的作用就是标志方法为挂起函数,被修饰为挂起函数的函数音乐,只能在协程或者其他挂起函数中调用

withContext函数的作用就是用来切换线程,后面可以看到Dispatchers.IO,就是我切换到IO线程了

这样,挂起函数就可以切到其他线程来执行了,执行完又回到launch中的主线程中继续执行,达到了自动切换线程效果

    private suspend fun getData(): String {
        return withContext(Dispatchers.IO) {
            "hen_coder"
        }
    }

后续更新如何把项目中Rxjava请求接口换成协程

文章来源:https://blog.csdn.net/no_stop_1/article/details/123137618