美文网首页Android Kotlin
Kotlin 协程 WithContext

Kotlin 协程 WithContext

作者: 三天过去了 | 来源:发表于2022-09-08 17:41 被阅读0次

    withContext 介绍

    • 是一个 suspend 函数,所以必须在协程或者 suspend 函数中使用。
    • 需要显示的指定作用域。
    • 会阻塞当前线程。
    • 有返回值,为代码块最后一行的值。
    • 返回后,会再切回当前线程。

    示例

    利用 withContext 实现一个线程切换的逻辑。

    fun main() {
        // 开启一个主线程作用域的协程
        CoroutineScope(Dispatchers.Main).launch {
            // getUserInfo 是一个 suspend 函数,且在 IO 线程中
            val userInfo = getUserInfo()
            // 网络请求以同步的方式返回了,又回到了主线程,这里操作了 UI
            tvName.text = userInfo.name
        }
    }
    
    // withContext 运行在 IO 线程
    suspend fun getUserInfo() = withContext(Dispatchers.IO){
        // 这里的网络请求结果在 callback 中
        // 所以借助 suspendCoroutine 函数同步使用 callback 返回值
        // 返回值为 UserInfo 对象
        // 还有 suspendCancellableCoroutine 函数也可以了解下
        suspendCoroutine<UserInfo> {
            // 发起网络请求
            HttpRequest().url("/test/getUserInfo").callback(object : HttpCallback<UserInfo?>() {
                override fun onError(request: Request?, throwable: Throwable) {
                    it.resumeWithException(throwable)
                }
    
                override fun onResponse(userInfo: UserInfo?) {
                    it.resume(userInfo)
                }
            })
        }
    }
    

    相关文章

      网友评论

        本文标题:Kotlin 协程 WithContext

        本文链接:https://www.haomeiwen.com/subject/kdponrtx.html