Рассмотрим следующий код Java (упрощенная версия того, с чем я работаю - если есть ошибки, это потому, что я не запускал его через компилятор):
CountdownLatch latch = new CountdownLatch(collection.size());
for(Whatever thing : collection){
provider.doWork(thing, result -> {
process(result);
latch.countDown();
};
}
try {
latch.await();
} catch (InterruptedException ignore) {}
doMoreWork();
Итак, я запускаю числоасинхронных задач, и дождитесь их выполнения, прежде чем продолжить.Прямо сейчас я накапливаю результат асинхронных задач в списке.Это работает, и это хорошо, но я смотрю, есть ли более чистая реализация, использующая Futures или что-то подобное.Проблема заключается в асинхронном вызове.Предполагается, что Callable возвращает результат своей работы, но результат этой работы будет известен только позже.Не стоит переписывать doWork
, чтобы быть синхронным.Должен ли я просто оставить это в покое, или есть вариант там?Отчасти мой интерес к лучшему коду, но отчасти просто к тому, чтобы больше узнать о вариантах параллелизма.Если это имеет значение, это в приложении для Android.