@Async, Future, AsyncResult;Какие существуют методы «ожидания» завершения асинхронных функций? - PullRequest
0 голосов
/ 28 декабря 2018

Контекст: я очень новичок в Spring и никогда раньше не использовал @Async.Я был направлен на дублирование частей кода на основе примера кода, отправленного мне по электронной почте.

Если я собирался это сделать, то единственный способ, которым я могу рассказать, основан на документации и руководствах для @async должен использовать Future.isDone () и, возможно, иметь список, из которого я могу удалить узлы, когда они «сделаны» и продолжаются, когда список пуст.

Что я хотел бы знать, так это если естьдругие способы узнать, когда «будущее» сделано?

Нет, где в данном примере кода есть строка future.isDone ().

Они просто вызывают другую функцию после асинхронной синхронизациибыли сделаны запросы, которые используют цикл for как

for (Entry<AClass, Future<String>> a : b.entrySet()) {

Есть ли здесь какой-то магический итератор voodoo с "foreach", или, может быть, мой пример кода кто-то дал мне неполным,или здесь что-то еще происходит?

1 Ответ

0 голосов
/ 29 декабря 2018

Я полагаю, что вы запутались в методе future.isDone()

isDone Он просто вернет либо true, либо false

Возвращает true, если завершено в любоммода: обычно, исключительно или через отмену.

И для выполнения действий над объектом Future вам не нужно вызывать future.isDone() и выяснить, завершена ли задача или нет

public T get () выдает InterruptedException, ExecutionException (вы должны увидеть этот метод)

При необходимости ожидает завершения этого будущего, а затем возвращаетего результат.

Броски:

CancellationException - если это будущее было отменено

ExecutionException - если это будущее завершено исключительно

InterruptedException - если текущий поток былпрервано во время ожидания

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