Как поместить переменную обновления блокирующей функции в асинхронный поток данных ReactiveX - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь отправить переменную int, которая постоянно обновляется в цикле for. Внутри цикла for данные публикуются для наблюдения. Поскольку переменная увеличивается в блокирующем вызове, и я хочу получить это значение в моем методе подписки реактивного X. Примечание. Я не хочу добавлять эту переменную в свой поток асинхронных данных (т.е. без отправки этого значения методом publisher.onNext ()).

после увеличения переменной int и публикации в observable в каждой итерации цикла for, я вызываю wait () для объекта. При использовании подписки я получаю значение переменной, а затем уведомляю () тот же объект. Я получаю исключение «Асинхронный цикл прерван»

public int var=0;

main(String[] args) {
    for loop {
        variable++;
        publisher.onNext(args[0]);
        //call wait on a thread to make sure current value of 'var' 
        //is picked in the getSubscriber() method
        wait(); 
    }
}

public Subscriber<T> getSubscriber() {
    return new Subscriber<Inference>() {
            @Override public void onCompleted() {}
            @Override public void onError(Throwable e) { 
               e.printStackTrace(); 
            }
            @Override public void onNext(Inference infer) {
                //do something

                sysout(var);
                //call notify on the thread to resume control in for 
                //loop
                notify();
            }
    };
}

1 Ответ

0 голосов
/ 01 февраля 2019

Просто нужно вызвать wait() и notify() в synchronized блоках, и это работает.

...