首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是什么决定了函数是否阻塞?

是什么决定了函数是否阻塞?
EN

Stack Overflow用户
提问于 2021-07-22 19:16:34
回答 1查看 46关注 0票数 0

我正在使用OkHttp发出同步get请求。为了避免阻塞主线程,我将阻塞的网络调用包装在一个挂起函数和withContext(Dispatchers.IO)

代码语言:javascript
运行
复制
    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()
        }
    }

对于execute()string()函数,Android Studio都会给出“不适当的阻塞方法调用”的警告。我预计execute()会被阻塞,因为它正在发出同步的http请求。我不明白为什么string()会被认为是阻塞的,因为它只是从变量中检索属性。Kotlin如何确定哪些函数正在阻塞,哪些函数没有阻塞?

EN

回答 1

Stack Overflow用户

发布于 2021-07-22 22:45:55

您需要在协程中调用挂起的fun run()才能使其正常工作。您可能正在使用variable = run()调用它。它期待着回报,但回报还没有准备好。所以它会阻塞等待返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68483868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档