簡體   English   中英

異步等待線程異常

[英]Async await thread exception

我對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. 當嘗試 await Name方法時; 那4次不起作用。
  2. 我嘗試使方法無效,不要執行不起作用的任務。

我不知道該怎么辦。 第一個方法執行大約需要 6.7 秒。 第二種方法是大約 4 秒。 第三個 6 秒。 第四個6秒。

最后需要我並行執行 4 個方法並等待來自該 4 個方法的所有數據。 因為根據這些數據,我稍后會填寫數據圖表。 是空列表拋出異常。

您可以使用Task.WhenAll讓方法並行執行:

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

Task.WhenAll返回一個新Task ,該Tasks在所有提供的Tasks完成后完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM