Asyn c ожидают исключения потока - PullRequest
1 голос
/ 27 марта 2020

У меня большая проблема с Task методом, и asyn c ждут. У меня есть 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()
);

Это работа, но когда вы go на странице 2 или 3 раза исключение бросить, что List пусто которые берут данные из API (некоторые из методов).

При попытке подождать Name метод; и это 4 раза, которые не работают. Я стараюсь, чтобы метод был пустым, не выполняйте задачи, которые тоже не работают.

Я не знаю, что делать. Первый метод выполнения составляет около 6,7 сек c. Второй метод составляет около 4 SE c. Третий 6 се c. Четвёртый 6se c.

Final требует от меня параллельного выполнения метода 4 и ожидания всех этих данных из этого метода 4. Потому что из этих данных я заполняю таблицу данных позже. Пустой список выдает исключение.

1 Ответ

0 голосов
/ 29 марта 2020

Вы можете использовать Task.WhenAll, чтобы методы выполнялись параллельно:

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

Task.WhenAll возвращает новый Task, который завершается, когда все предоставленные Tasks завершено.

...