У меня есть функция, которая периодически получает данные, а затем прекращает получать данные. Эта функция должна возвращать данные, которые она периодически выбирает, вызывающей функции: либо
- Как и когда она получает
- за один выстрел
2-ая - простая реализация, т.е. вы блокируете вызывающего, извлекаете все данные и затем отправляете их за один раз.
Но я хочу реализовать 1-й (я хочу избежать обратных вызовов). Есть потоки вещи, которые будут использоваться здесь? Если так, то как? Если нет, то как вернуть something
, при котором вызывающая сторона может запрашивать данные, а также останавливаться, когда возвращает сигнал о том, что данных больше нет?
Примечание. Я нахожусь в экосистеме JVM, близко к уточняйте c. Я посмотрел библиотеку clojure core.async
, которая решает проблему такого рода с использованием каналов. Но я думал, есть ли другой способ, который, вероятно, выглядит следующим образом (предполагая, что потоки - это то, что можно использовать).
Java фрагмент
//Function which will periodically fetch MyData until there is no data
public Stream<MyData> myFunction() {
...
}
myFunction().filter(myData -> myData.text.equals("foo"))