Я пытаюсь использовать библиотеку Clojure core.async
для использования/обработки строк из файла. Когда мой код выполняется, IOException: Stream closed
является броском. Ниже приведен сеанс REPL, который воспроизводит ту же проблему, что и в моем коде:
(require '[clojure.core.async :as async])
(require '[clojure.java.io :as io])
; my real code is a bit more involved with calls to drop, map, filter
; following line-seq
(def lines
(with-open [reader (io/reader "my-file.txt")]
(line-seq reader)))
(def ch
(let [c (async/chan)]
(async/go
(doseq [ln lines]
(async/>! c ln))
(async/close! c))
c))
; line that causes the error
; java.io.IOException: Stream closed
(async/<!! ch)
Поскольку я впервые делаю что-то подобное (асинхронный + файл), возможно, у меня есть некоторые неправильные представления о том, как это должно работать. Может ли кто-нибудь прояснить, каков правильный подход к отправке строк файла в конвейер каналов?
Спасибо!