谁能解释为什么这些“不合适的阻塞方法调用”警告从我的代码中弹出?

Arpan Sircar

我用Kotlin编写了这段代码,以使用协程下载一些API信息来下载数据。但是,该代码显示了许多警告,指出该消息为“不适当的阻止方法调用”。

这是代码:

class DownloadInfoClass {
    private lateinit var url: URL
    private lateinit var httpURLConnection: HttpURLConnection
    private lateinit var result: String
    private lateinit var inputStream: InputStream
    private lateinit var inputStreamReader: InputStreamReader
    private var dataMap: MutableMap<String, Any> = mutableMapOf()

    private fun downloadMethod(urls: String){
        CoroutineScope(IO).launch {
            try {
                url = URL(urls)
                httpURLConnection = url.openConnection() as HttpURLConnection
                inputStream = httpURLConnection.inputStream
                inputStreamReader = InputStreamReader(inputStream)

                var data: Int = inputStreamReader.read()
                while (data != -1){
                    val current: Char = data.toChar()
                    result += current
                    data = inputStreamReader.read()
                }
            }

            catch (e: Exception){
                e.printStackTrace()
            }
        }
        Log.i("Result: ", result)
    }
}

发生此问题的特定区域是:

  1. URL(urls)
  2. openConnection()
  3. read()

谁能帮助我了解为什么会这样?我通读了Kotlin文档,但无法理解。另外,您能告诉我如何解决此问题吗?

引诱

问题是,协程被构建为仅挂起而不阻塞线程。这意味着,多个协程可以在同一线程上运行。使用阻塞方法时,它们将阻塞整个线程,并且可能会阻止其他协程运行。因此,这样做通常是不好的做法。

由于显然您需要调用这些方法,因此请使用一个调度程序,尝试为每个协程创建一个新线程,例如Dispatchers.IO(针对这些操作而设计,请参见文档)。为此,只需使用来包装阻塞调用withContext

withContext(Dispatchers.IO) { 
   // your blocking calls 
}

希望我能帮上忙!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

谁能解释为什么我的Java代码多播无法通过LAN工作?

来自分类Android

改版response.errorBody.string()给我警告在暂停函数中调用了不合适的阻塞方法

来自分类Dev

如何使“不合适的阻塞方法调用”合适?

来自分类Dev

为什么调用不合适的重载函数?

来自分类Dev

谁能解释为什么这个笨拙的 if/else 代码不起作用?

来自分类Dev

谁能解释为什么内容无法清除?

来自分类Dev

谁能解释为什么 JUnit 测试会出错?

来自分类Dev

谁能解释为什么这不起作用?

来自分类Dev

为什么我的JavaFX窗口宽度不合适?

来自分类Dev

为什么我的中层div不合适?

来自分类Dev

为什么我的桌子的边框间距不合适?

来自分类Dev

为什么我的图库图像之一不合适?

来自分类Dev

我的程序没有为 print("the") 打印任何内容。谁能解释为什么?

来自分类Dev

谁能解释为什么我的程序未显示正确的警报?

来自分类Dev

谁能解释为什么我们需要在SpriteKit中进行缩放?

来自分类Dev

谁能解释为什么我的Z-Index无法正常工作?

来自分类Dev

VBA-谁能解释为什么我通过Cells()遇到对象错误?

来自分类Dev

谁能解释为什么我的Carbon设置不保留数据?

来自分类Dev

Android和Kotlin协程:不合适的阻塞方法调用

来自分类Dev

谁能解释为什么我的date函数通过JS date对象给我一个错误的转换?

来自分类Javascript

谁能解释为什么我在这个leetcode问题上得到未定义的输出?

来自分类Dev

为什么我的座标标高不对,谁能解释我

来自分类Dev

谁能解释我为什么在此代码中使用花括号“ {}”?

来自分类Dev

谁能向我解释为什么这个 lisp 代码不起作用?

来自分类Dev

谁能解释,为什么我的分类不能正常工作?

来自分类Dev

为什么我的'if'参数不能解释为逻辑

来自分类Dev

为什么这个函数调用没有拒绝不合适的重载?

来自分类Dev

谁能解释为什么这个递归函数会崩溃?

来自分类Dev

谁能解释为什么这个fork执行将文本打印8倍?

Related 相关文章

  1. 1

    谁能解释为什么我的Java代码多播无法通过LAN工作?

  2. 2

    改版response.errorBody.string()给我警告在暂停函数中调用了不合适的阻塞方法

  3. 3

    如何使“不合适的阻塞方法调用”合适?

  4. 4

    为什么调用不合适的重载函数?

  5. 5

    谁能解释为什么这个笨拙的 if/else 代码不起作用?

  6. 6

    谁能解释为什么内容无法清除?

  7. 7

    谁能解释为什么 JUnit 测试会出错?

  8. 8

    谁能解释为什么这不起作用?

  9. 9

    为什么我的JavaFX窗口宽度不合适?

  10. 10

    为什么我的中层div不合适?

  11. 11

    为什么我的桌子的边框间距不合适?

  12. 12

    为什么我的图库图像之一不合适?

  13. 13

    我的程序没有为 print("the") 打印任何内容。谁能解释为什么?

  14. 14

    谁能解释为什么我的程序未显示正确的警报?

  15. 15

    谁能解释为什么我们需要在SpriteKit中进行缩放?

  16. 16

    谁能解释为什么我的Z-Index无法正常工作?

  17. 17

    VBA-谁能解释为什么我通过Cells()遇到对象错误?

  18. 18

    谁能解释为什么我的Carbon设置不保留数据?

  19. 19

    Android和Kotlin协程:不合适的阻塞方法调用

  20. 20

    谁能解释为什么我的date函数通过JS date对象给我一个错误的转换?

  21. 21

    谁能解释为什么我在这个leetcode问题上得到未定义的输出?

  22. 22

    为什么我的座标标高不对,谁能解释我

  23. 23

    谁能解释我为什么在此代码中使用花括号“ {}”?

  24. 24

    谁能向我解释为什么这个 lisp 代码不起作用?

  25. 25

    谁能解释,为什么我的分类不能正常工作?

  26. 26

    为什么我的'if'参数不能解释为逻辑

  27. 27

    为什么这个函数调用没有拒绝不合适的重载?

  28. 28

    谁能解释为什么这个递归函数会崩溃?

  29. 29

    谁能解释为什么这个fork执行将文本打印8倍?

热门标签

归档