我仍在讨论Azure Storage Java SDK 10及其对反应式编程的使用。我编写了以下方法,以尽可能快地将blob异步下载到字节流。当我使用同步版本(如下)时,它可以正常工作。当我注释掉blockingAwait()并取消注释订阅时,将永远不会执行write和doOnComplete ...基本上,运行只是从方法底部退回到调用者。我确信我犯了一个异步处理错误,并希望有人可以引导我朝正确的方向发展。顺便说一下,我很惊讶地发现下载到流而不是文件的样本很少。希望这篇文章对其他人有帮助。
CountryModel
这是调用上述方法的代码:
override fun downloadBlob(url: String, downloadStream: OutputStream) {
BlockBlobURL(URL(url), pipeline)
.download(null, null, false, null)
.flatMapCompletable { response ->
FlowableUtil.collectBytesInBuffer(response.body(null))
.map {
Channels.newChannel(downloadStream).write(it)
}.toCompletable()
}.doOnComplete {
println("The blob was downloaded...")
}.blockingAwait()
//.subscribe()
}