Как выполнять инструкции после завершения работы нескольких параллельных asynctasks?

Я хочу выполнить две AsyncTasks вместе следующим образом:

new FetchProjetsTask().execute(projets.getId());
new FetchDashBoardsTask().execute(dashBoards.getId());

Как я могу дождаться их завершения, чтобы выполнить другие инструкции?
(Я ищу метод, похожий на onPostExecute, но для нескольких AsyncTasks)

0
0
33
2

Ответы 2

Если вы не хотите зацикливаться на новых доменах, таких как RxJava и Executors/Futures, вы можете создать новый AsyncTask и вызвать эти 2 там блокирующим способом.

doInBackground() {
    Result resultProjects = new FetchProjetsTask().execute(projets.getId()).get();
    Result resultDashboards= new FetchDashBoardsTask().execute(dashBoards.getId()).get();
    // continue with necessary logic
}

Обратите внимание, что get()может генерировать исключения. Однако, если вам не нужно использовать результат обеих задач для выполнения, вы можете реализовать решение с защелками, как здесь Дождитесь завершения нескольких AsyncTask

Моя идея состоит в том, чтобы использовать возможность предоставления вашего собственного исполнитель для AsyncTasks, используя

new FetchProjetsTask().executeOnExecutor(yourExecutor, projets.getId());
new FetchDashBoardsTask().executeOnExecutor(yourExecutor, dashBoards.getId());

а затем используйте Executor awaitTermination, чтобы дождаться завершения обеих задач.

Другие вопросы по теме