在普通函数内调用暂停函数

时间:2019-06-01 19:52:41

标签: android kotlin coroutine suspend kotlin-coroutines

我想在普通函数中调用阻止挂起函数,但不阻止线程完成挂起函数,然后返回Response

override fun intercept(chain: Interceptor.Chain): Response {

    // getSession is a suspend function
    val session = sessionProvider.getSession()

    return chain.proceed(
        chain
            .request()
            .newBuilder()
            .addHeader("Authorization", "${session.token}")
            .build()
    )
}

1 个答案:

答案 0 :(得分:3)

看来您正在实现OkHttp拦截器,所以我希望在后台线程上调用intercept()

如果是这样,use runBlocking()

override fun intercept(chain: Interceptor.Chain): Response {

    // getSession is a suspend function
    val session = runBlocking { sessionProvider.getSession() }

    return chain.proceed(
        chain
            .request()
            .newBuilder()
            .addHeader("Authorization", "${session.token}")
            .build()
    )
}

runBlocking()将执行suspend函数,阻塞当前线程,直到工作完成。