代码之家  ›  专栏  ›  技术社区  ›  beigirad

在普通函数内调用挂起函数

  •  1
  • beigirad  · 技术社区  · 5 年前

    我想在普通函数中调用阻塞挂起函数,但不阻塞线程以完成挂起函数,然后返回 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 回复  |  直到 5 年前
        1
  •  3
  •   CommonsWare    5 年前

    看起来您正在实现一个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()
        )
    }
    

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