【发布时间】:2020-09-17 14:37:17
【问题描述】:
我在使用套接字时收到此警告。我正在从 IO 范围协程调用 startConnection 方法,如果 startConnection 方法被挂起,我会收到警告。我将其设为挂起,因为稍后我会从中调用其他一些挂起方法。有什么办法可以解决这个问题还是我应该取消警告?
private suspend fun startConnection(ip: String, port: Int) {
try {
socket = Socket(ip, port)
.
.
【问题讨论】:
-
协程永远不应该调用阻塞函数。无论您如何调用此函数,您都应始终确保在 IO 调度程序中启动阻塞代码。使用
socket = withContext(Dispatchers.IO) { Socket(ip, port) } -
我尝试了你的解决方案,但它仍然抛出相同的警告:不适当的阻塞方法调用
-
只要函数是“暂停”,警告就会一直存在。
-
我没有看到此代码的任何此类警告:
private suspend fun startConnection(ip: String, port: Int) = withContext(Dispatchers.IO) { val socket = Socket(ip, port) } -
这不是完全相同的代码,您使用
IO作为调度程序。如果这不是Dispatchers.IO的导入快捷方式,例如val IO = Dispatchers.IO,则检查失败。
标签: android kotlin kotlin-coroutines