Запуск по завершению приемника FileIO.toPath - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть источник ввода-вывода. Я мультиплексирую файл и передаю его в другую часть системы для выполнения следующим образом:

source.alsoTo(FileIO.toPath(path))

Это используется для кэша, т.е. я пишу файлпроходя через мою систему во временный кешКак только кеш записан, я хочу переместить его атомарно в его окончательное местоположение.

Потребитель источника получает Future и знает, когда это будет сделано, но мой побочный канал записи в файл на дискне имеет такого объекта, который я могу найти.Есть ли способ прикрепить обработчик завершения к приемнику, чтобы я мог завершить манипулирование этим файлом?

1 Ответ

0 голосов
/ 23 ноября 2018

Вместо alsoTo используйте alsoToMat и mapMaterializedValue для доступа к материализованному значению файла Sink:

val source: Source[ByteString, _] = ???

val cachedSource =
  source
    .alsoToMat(FileIO.toPath(path))(Keep.right)
    .mapMaterializedValue { fileResult => // fileResult is a Future[IOResult]
      // do something with fileResult
    }
...