是什么决定函数是否被阻塞



我正在使用OkHttp进行同步获取请求。为了避免阻塞主线程,我将阻塞网络调用封装在一个挂起函数和withContext(Dispatchers.IO)

suspend fun run(): String {
val client = OkHttpClient()
val request = Request.Builder()
.url("https://publicobject.com/helloworld.txt")
.build()
return withContext(Dispatchers.IO) {
val response = client.newCall(request).execute()
return@withContext response.body!!.string()
}
}

安卓工作室给了我警告";不适当的阻塞方法调用";用于CCD_ 2和CCD_。我预计execute()会被阻塞,因为它正在发出同步http请求。我不明白为什么string()会被认为是阻塞的,因为它只是从变量中检索一个属性。Kotlin如何确定哪些函数是阻塞的,哪些不是?

您需要在协程中调用挂起的fun run((才能使其工作。您可能使用variable=run((来调用它。它期待着回归,但回归还没有准备好。因此,它阻止了等待返回。

相关内容

最新更新