Я все еще использую Azure Storage Java SDK 10, и в нем используется реактивное программирование.Я написал следующий метод для асинхронной загрузки большого двоичного объекта в поток байтов как можно быстрее.Когда я использую синхронную версию (ниже), она работает правильно.Когда я закомментирую blockingAwait () и раскомментирую подписку, write и doOnComplete никогда не выполняются ... По сути, выполнение просто выпадает из нижней части метода обратно к вызывающей стороне.Я уверен, что допустил ошибку асинхронной обработки, и надеюсь, что кто-то может направить меня в правильном направлении.Кстати, я был удивлен, обнаружив, что очень мало примеров загрузки в поток, а не в файл ... Надеюсь, эта публикация поможет другим.
Спасибо за ваше время и интерес кмоя проблема ...
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()
}
Вот код, вызывающий вышеуказанный метод:
fun getAerialImageBlobStream(aerialImageUrl: String): MapOutputStream {
val aerialImageStream = MapOutputStream()
blobStorage.downloadBlob(aerialImageUrl, aerialImageStream)
return aerialImageStream
}