如何替换Kotlin中读取字节的阻塞代码
我有一个如何替换Kotlin中读取字节的阻塞代码,kotlin,kotlin-coroutines,ktor,Kotlin,Kotlin Coroutines,Ktor,我有一个ktor应用程序,该应用程序需要来自多部分的文件,代码如下: multipart.forEachPart { part -> when (part) { is PartData.FileItem -> { image = part.streamProvider().readAllBytes() } else -> // irrelevant } } Intellij IDEA将readAllBytes()标记为不适当
ktor
应用程序,该应用程序需要来自多部分的文件,代码如下:
multipart.forEachPart { part ->
when (part) {
is PartData.FileItem -> {
image = part.streamProvider().readAllBytes()
}
else -> // irrelevant
}
}
Intellij IDEA将
readAllBytes()
标记为不适当的阻塞调用,因为ktor在协同路由之上运行。如何将这个阻塞调用替换为适当的调用?鉴于Ktor作为一个非阻塞、挂起IO框架的声誉,我很惊讶地发现,显然对于FileItem
来说,除了阻塞InputStream
API之外,没有别的东西可以检索它。有鉴于此,您唯一的选择似乎是委托给IO调度器:
image = withContext(Dispatchers.IO) { part.streamProvider().readBytes() }