我对Task
方法有很大的疑问,并且异步等待。
我有4种方法类型:
private async Task Name(parameters)
{
}
以及如何调用所有4种方法来并行执行并优化时间执行。重点是构造函数。我尝试了很多事情。我在这里在构造函数中调用了一些方法:
1。
Parallel.Invoke(
() => OnLoadPrometDanKorisnikDatum(KorisnikID, PomocnaDnDDatnaDat, DatumVrednost).Wait(),
() => OnLoadPrometNedelja(KorisnikID, PomocnaDnDDatnaDatNedelja).Wait(),
() => OnLoadPrometMesec(KorisnikID, PomocnaVrednostMeseciPicker).Wait(),
() => OnLoadPrometGodina(KorisnikID, 0).Wait()
);
这是可行的,但是当您进行第2或第3次异常抛出时,List
为空,这会从API(某些方法)获取数据。
Name
方法时;那四次都行不通。 我不知道该怎么办。第一种方法的执行时间约为6.7秒。第二种方法约为4秒。第三6秒。第四6秒。
最终需要我并行执行4个方法并等待该4个方法中的所有数据。因为稍后我将从该数据中填写数据图表。是空列表引发异常。
答案 0 :(得分:1)
您可以使用Task.WhenAll
来使方法并行执行:
await Task.WhenAll(
OnLoadPrometDanKorisnikDatum(KorisnikID, PomocnaDnDDatnaDat, DatumVrednost),
OnLoadPrometNedelja(KorisnikID, PomocnaDnDDatnaDatNedelja),
OnLoadPrometMesec(KorisnikID, PomocnaVrednostMeseciPicker),
OnLoadPrometGodina(KorisnikID, 0)
);
Task.WhenAll
返回一个新的Task
,当提供的所有Tasks
完成时,新的 let currentPage = self.articles.count/pageSize
fetchHeadlines(page: currentPage+1)
完成。