Я пытался выяснить, почему пользовательский интерфейс блокирует метод ViewModel, и понял, что эта часть код:Разница между Task.WhenAll (Task.Run (метод async)) и Task.WhenAll (метод async)
await Task.WhenAll(getOutput1(), getOutput2());
была проблема. Мне удалось разблокировать пользовательский интерфейс с помощью:
await Task.WhenAll(Task.Run(() => getOutput1()), Task.Run(() => getOutput2()));
getOutput1()
и getOutput2()
оба async
с Task
возвращаемых типов в ViewModel, а код вызывается из вида.
В чем разница с вызовом Task.WhenAll, когда я вызываю Task.Run() и непосредственно передаю задачу?
Если 'getOutput1' и' getOutput2' оба «действительно» асинхронны, тогда первый параметр должен работать правильно. можете ли вы показать эти методы? Обратите внимание, что метод async будет выполняться синхронно, если вы не читаете операции «IO». – Fabio
Весьце зависит от характера 'getOutput1' и' getOutput2'. Если они выполняют значительную работу без использования какого-либо асинхронного поведения, эта работа выполняется в исходном потоке в версии 1 вашего кода. –
@Damien_The_Unbeliever на самом деле вы правы, я только вызываю асинхронное поведение, когда планирую на поток пользовательского интерфейса внутри метода. Спасибо за понимание – Tyress