【问题标题】:Async await thread exception异步等待线程异常
【发布时间】:2020-07-08 12:47:40
【问题描述】:

我对@9​​87654321@ 方法和异步等待有很大的问题。 我有 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方法时;那4次不起作用。
  2. 我尝试使方法无效,不要执行也不起作用的任务。

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

最终需要我并行执行 4 个方法并等待来自该 4 个方法的所有数据。因为我稍后会根据该数据填充数据图表。是空列表抛出异常。

【问题讨论】:

  • 这很难读;通过将代码格式化为代码,更清楚地说明您的问题是什么,等等,帮助那些试图帮助您的人。
  • 感谢您的澄清;我已经投票决定重新开放。

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


【解决方案1】:

您可以使用Task.WhenAll 让方法并行执行:

await Task.WhenAll(
    OnLoadPrometDanKorisnikDatum(KorisnikID, PomocnaDnDDatnaDat, DatumVrednost),
    OnLoadPrometNedelja(KorisnikID, PomocnaDnDDatnaDatNedelja),
    OnLoadPrometMesec(KorisnikID, PomocnaVrednostMeseciPicker),
    OnLoadPrometGodina(KorisnikID, 0)
);

Task.WhenAll 返回一个新的Task,当所有提供的Tasks 都完成后,它就完成了。

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多