如何替换 Kotlin 中读取字节的阻塞代码
How to replace blocking code for reading bytes in Kotlin
我有 ktor
应用程序,它需要来自多部分的文件,代码如下:
multipart.forEachPart { part ->
when (part) {
is PartData.FileItem -> {
image = part.streamProvider().readAllBytes()
}
else -> // irrelevant
}
}
Intellij IDEA 将 readAllBytes()
标记为不适当的阻塞调用,因为 ktor 在协程之上运行。如何将此阻塞调用替换为适当的调用?
鉴于 Ktor 作为 non-blocking 暂停 IO 框架的声誉,我很惊讶 FileItem
显然除了阻塞 InputStream
API检索它。鉴于此,您唯一的选择似乎是委托给 IO 调度程序:
image = withContext(Dispatchers.IO) { part.streamProvider().readBytes() }
我有 ktor
应用程序,它需要来自多部分的文件,代码如下:
multipart.forEachPart { part ->
when (part) {
is PartData.FileItem -> {
image = part.streamProvider().readAllBytes()
}
else -> // irrelevant
}
}
Intellij IDEA 将 readAllBytes()
标记为不适当的阻塞调用,因为 ktor 在协程之上运行。如何将此阻塞调用替换为适当的调用?
鉴于 Ktor 作为 non-blocking 暂停 IO 框架的声誉,我很惊讶 FileItem
显然除了阻塞 InputStream
API检索它。鉴于此,您唯一的选择似乎是委托给 IO 调度程序:
image = withContext(Dispatchers.IO) { part.streamProvider().readBytes() }