Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin-阻塞调用是否使挂起无效?发生';不恰当的阻塞方法调用';警告_Kotlin - Fatal编程技术网

Kotlin-阻塞调用是否使挂起无效?发生';不恰当的阻塞方法调用';警告

Kotlin-阻塞调用是否使挂起无效?发生';不恰当的阻塞方法调用';警告,kotlin,Kotlin,考虑以下函数 suspend-fun-writeToStream(osw:OutputStreamWriter,text:String)=withContext(Dispatchers.IO){ osw.use{it.write(text)}//AndroidStudio警告有关“write”的信息,这是一个不恰当的阻塞方法调用 } 警告是否意味着该函数实际上没有挂起? 我已经对此进行了调查,根据Tenfour4的评论,似乎警告可能不正确(显然有一些错误): 阻塞调用仍然是阻塞调用,但Disp

考虑以下函数

suspend-fun-writeToStream(osw:OutputStreamWriter,text:String)=withContext(Dispatchers.IO){
osw.use{it.write(text)}//AndroidStudio警告有关“write”的信息,这是一个不恰当的阻塞方法调用
}
警告是否意味着该函数实际上没有挂起?
我已经对此进行了调查,根据Tenfour4的评论,似乎警告可能不正确(显然有一些错误):

阻塞调用仍然是阻塞调用,但Dispatchers.IO可以容忍阻塞调用,因为与Dispatchers.Default不同,它可以创建所需的任意多个线程。如果其他调度程序都被阻塞调用而锁定,则可能会耗尽线程

此代码未显示警告,但显然未挂起:

fun writeToStream(osw:OutputStreamWriter,text:String)=运行阻塞(Dispatchers.IO){
osw.use{it.write(text)}
}

总而言之,阻塞调用是否会抵消挂起的好处?是否有可能拥有使用阻塞调用的suspend函数,并且具有suspend的所有优点?AndroidStudio的警告是否不正确,因为它不知道我使用了
Dispatchers.IO

我很确定这是一个误报,可能与链接的错误报告中的情况完全相同
async
紧跟其后的
await()
应该是几乎完全相同的行为,这不会触发警告,而是一个警告,您应该将其替换为
withContext()
,从而触发另一个警告。