У меня есть две asyctask, которые вызываются одновременно, но мне нужны оба двух аусинхронных результата для обработки следующего шага.Дождитесь результата обеих двух задач asnyc
У меня есть одно решение: Учитывая переменные два члена для проверки состояния возврата две асинхронной задачи:
boolean b1 = false;
boolean b2= false;
Result r1 = null;
Result r2 = null;
callback1(
done(Result r){
b1 = true;
r1 = r;
asyncTwoFunction(b1,b2)
}
)
callback2(
done(Result r){
b2 = true;
r2 = r;
asyncTwoFunction(b1,b2)
}
)
asyncTwoFunction(b1,b2){
if(b1 && b2){
doSomeThing(r1,r2);
b1 = false;
b2 = false;
}
}
есть какой-то лучший способ сделать это? Спасибо
asyncTwoFunction, должно ли оно выполняться асинхронно или предназначено для запуска в основном потоке? Если основной поток, то вы получили правильное решение. – zapl
Вы можете использовать [CountDownLatch] (http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html), если у вас есть возможность ждать в параллельном потоке. Но это не дает вам обратного вызова. –
Чтобы использовать обратные вызовы, вы можете использовать Futures и [добавить свой собственный интерфейс] (http://stackoverflow.com/questions/826212/java-executors-how-to-be-notified-without-blocking-when-a-task- завершает), чтобы получить обратный вызов. Но это слишком много для двух задач в одном месте. Поэтому ваши решения выглядят вполне разумно. –