Java - серия асинхронных вызовов, но перед продолжением нужно ждать ответа от каждого асинхронного вызова - PullRequest
0 голосов
/ 12 октября 2018

Существующий поток для одиночного асинхронного вызова выглядит следующим образом: Выполните вызов внутренней службе Java, которая отправляет вызов на основе сообщения.На этом этапе этот процесс завершен.
Реализован шаблон наблюдателя, который вызывается, когда ответ (на основе сообщений) возвращается в службу java.Вызван метод onResponse, и должно произойти завершение ответа.

Отредактировано, чтобы дать больше подробностей: я проверил с CountDownLatch и Phaser, чтобы оба этих сценария работали, где мой основной поток отвечает за порождение параллелипоток асинхронного вызова.Параллельный поток завершается, и основной поток ожидает уведомления о получении ответа от асинхронного вызова.Если ответ означает успех, перейдите к следующему параллельному вызову и т. Д.Вот пример Phaser, который работал хорошо.Вопрос в том, нахожусь ли я на правильном пути, или есть что-то более легкое / лучшее?

main thread:
    new Phaser(1);
    for (iteration of number of request objects received){
        create new thread, call serviceMethod.
        phaser.arriveAndAwaitAdvance;  //waits for arrival of registered party 

        if phaser.isTerminated
            stop processing this request;
    }



serviceMethod(){
    phaser.register
    perform call
}


onResponse(){
    if SUCCESS  
        phaser.arriveAndDeregister();  //main thread should continue on to 
                       next call
    else
        phaser.forceTermination
}

1 Ответ

0 голосов
/ 12 октября 2018

Несмотря на мои комментарии к вашему вопросу, я предложу ответ, потому что я полагаю, что могу дать вам ответ другого рода, не видя ни одного вашего кода:

По определение асинхронный вызов - это вызов, при котором вызывающая сторона не блокирует ожидание ответа.Поэтому, если у вас есть требование дождаться ответа, вы можете избежать описываемой проблемы, выполнив вместо этого серию синхронных вызовов.

Опять же, немного перефразируя строку из вашего вопроса:Процесс должен заключаться в том, чтобы я совершил звонок, но дождался ответа, прежде чем инициировать следующий звонок ». описывает сценарий синхронного вызова.В этом смысле я подозреваю, что вы подходите к проблеме с неправильной стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...