如何替换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() }