我有ktor
应用程序,它期望这样的代码中包含多个部分的文件:
multipart.forEachPart { part ->
when (part) {
is PartData.FileItem -> {
image = part.streamProvider().readAllBytes()
}
else -> // irrelevant
}
}
由于ktor在协程之上运行,因此Intellij IDEA将readAllBytes()
标记为不适当的阻塞调用。如何将此阻塞呼叫替换为适当的呼叫?
答案 0 :(得分:3)
考虑到Ktor作为非阻塞,挂起的IO框架的声誉,我很惊讶地发现,对于FileItem
来说,只有阻塞InputStream
API能够检索它。鉴于此,您唯一的选择似乎是委托给IO调度程序:
image = withContext(Dispatchers.IO) { part.streamProvider().readBytes() }