Акка Раковина никогда не закрывается
Я загружаю один файл на SFTP-сервер, используя Alpakka, но как только файл загружен, и я получил ответ об успешном завершении, мойка остается открытой, как я могу слить ее?
Я начал с этого:
val sink = Sftp.toPath(path, settings, false)
val source = Source.single(ByteString(data))
source
.viaMat(KillSwitches.single)(Keep.right)
.toMat(sink)(Keep.both).run()
.map(_.wasSuccessful)
Но это в конечном итоге никогда не покидает шаг карты. Я попытался добавить Killswitch, но это, похоже, не дало эффекта (ни с выключением, ни с прерыванием):
val sink = Sftp.toPath(path, settings, false)
val source = Source.single(ByteString(data))
val (killswitch, result) = source
.viaMat(KillSwitches.single)(Keep.right)
.toMat(sink)(Keep.both).run()
result.map {
killswitch.shutdown()
_.wasSuccessful
}
Я делаю что-то в корне неправильно? Я просто хочу один результат.
РЕДАКТИРОВАТЬ настройки, отправленные в toPath
:
SftpSettings(InetAddress.getByName(host))
.withCredentials(FtpCredentials.create(amexUsername, amexPassword))
.withStrictHostKeyChecking(false)
2 ответа
Прося вас поставить Await.result(result, Duration.Inf)
В конце я хотел проверить теорию, высказанную А. Грегорисом. Таким образом, это либо
- ваше приложение выходит раньше
Future
завершает или - (если ваше приложение не закрывается) функция, в которой вы делаете это сбрасывает
result
Если ваше приложение не закрывается, вы можете попробовать использовать result.onComplete
делать необходимую работу.
Я не вижу весь ваш код, но мне кажется, что во фрагменте, который вы опубликовали, result
Значение - это будущее, которое не завершается до конца выполнения вашей программы, и это потому, что код в map
тоже не выполняется.