异步等待线程异常

时间:2020-03-27 18:07:28

标签: c# api xamarin.forms async-await task

我对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(某些方法)获取数据。

  1. 尝试使用Name方法时;那四次都行不通。
  2. 我试图使方法无效,不要执行也不起作用的任务。

我不知道该怎么办。第一种方法的执行时间约为6.7秒。第二种方法约为4秒。第三6秒。第四6秒。

最终需要我并行执行4个方法并等待该4个方法中的所有数据。因为稍后我将从该数据中填写数据图表。是空列表引发异常。

1 个答案:

答案 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) 完成。