我希望在另一个之后执行一个异步任务。这里,如果异步任务2将被执行,则取决于异步任务的值。 这就是我想要实现的目标
select
pl.userid,
pl.pricelistid,
pl.offerid,
sum(case when pl.type = 0 then 1 else 0 end) as 'times_viewed',
sum(case when pl.type = 1 then 1 else 0 end) as 'times_clicked',
max(pld.Title) as 'Title',
max(pld.URL) as 'URL',
max(pld.Model) as 'Name'
from PriceList pl
inner join PriceListDetails pld on pld.OfferId = pl.OfferId and pld.pricelistid = pl.pricelistid
where pl.pricelistid in (
select articleid
from c
where c.state = 2
and c.Created >= datediff(dd,0,getdate())
)
group by pl.userid, pl.pricelistid, pl.offerid
having sum(case when pl.type = 1 then 1 else 0 end) > 0
根据我的理解,这里x的值永远不会是0以外的任何值,因为条件if(x == 2)将在A1完成之前执行。 我希望在A1任务完成时执行条件if(x == 2)。
现在我知道在A1的onPostExecute中执行A2会有效,但我的情况要求我独立执行A2。
答案 0 :(得分:0)
您需要在第一个AsyncTask的onPostExecute()方法中执行第二个asyncTask。
答案 1 :(得分:0)
您可以在AsyncTask
内完成工作。使用Runnable
作为参数:
private class WorkerTask extends AsyncTask<Runnable, Void, Void> {
@Override
protected Void doInBackground(Runnable... runnables) {
for (Runnable task : runnables) {
task.run();
publishProgress();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
//update ui
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Void aVoid) {
//done
super.onPostExecute(aVoid);
}
}
你会像这样使用它:
Runnable taskOne = new Runnable() {
@Override
public void run() {
doSomeWork();
}
};
Runnable taskTwo = new Runnable() {
@Override
public void run() {
doSomeMoreWork();
}
};
new WorkerTask().execute(taskOne, taskTwo);