多个并行AsyncTask完成运行后,如何执行指令?

时间:2018-08-10 14:34:35

标签: android android-asynctask

我希望像这样一起执行两个AsyncTask:

exceldata = ParseDocument.Parse(filestream);
foo fooexample = new foo();
foreach (var object in exceldata)
{
    fooexample.id = object.id;
    fooexample.bar.id = object.bar.id; 
    // <-- how do I do this? if I need to initialize it, how?
}

我如何等待它们都完成才能执行其他指令?
(我正在寻找一种类似于 onPostExecute 的方法,但要用于多个AsyncTasks)

2 个答案:

答案 0 :(得分:0)

如果您不希望进入RxJavaExecutors/Futures之类的新域,则可以创建新的AsyncTask并以阻塞方式在其中调用那两个。

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

请注意,get() can throw exceptions。但是,如果不需要使用两个任务的结果来完成,都可以使用闩锁来实现解决方案,例如此处Wait for multiple AsyncTask to complete

答案 1 :(得分:0)

我的想法是利用

为AsyncTasks提供自己的executor的可能性
new FetchProjetsTask().executeOnExecutor(yourExecutor, projets.getId());
new FetchDashBoardsTask().executeOnExecutor(yourExecutor, dashBoards.getId());

,然后使用执行程序的awaitTermination来等待两项任务完成。