asyn c ждут task.run xamarin формы - PullRequest
       74

asyn c ждут task.run xamarin формы

0 голосов
/ 19 апреля 2020

Я просто хотел бы убедиться, что я хорошо понимаю различия между asyn c await и Task.run или Task.whenall

Так что asyn c await - это обработка асинхронных методов. Это означает, что подразумевается порядок обработки.

Я запускаю длинную обработку без блокировки основного потока и жду, пока результат продолжится.

Для Task.Run и Task.Wall, хотя есть новое понятие с многопоточностью. Это означает, что я могу запустить длинный процесс в новом потоке, и он не ждет завершения для продолжения кода. Код находится в новом потоке. На этой ветке тогда я могу ждать метода.

Итак, если я ясно понял, я решил использовать asyn c await для длинных процессов, что подразумевает порядок выполнения в главном потоке.

И я использую Task.run для параллельного выполнения потока и обработки независимо.

Это хороший способ и мое понимание хорошо?

Спасибо,

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Ваше понимание async / await и Task.Run в основном верно.

Task.Run позволяет легко запустить некоторый код в потоке ThreadPool и избежать блокировки текущего потока. Создание нескольких Task с или использование Parallel класса позволяет вам использовать преимущества нескольких ядер ЦП для ускорения работы.

При использовании async / await вы можете сделать некоторая работа, как только ваша задача выполнена. Благодаря SynchronizationContext код после await может быть выполнен обратно в исходном потоке, хотя это не всегда так. Например, консольное приложение не имеет SynchronizationContext.

. Важно помнить, что async / await отлично подходит для работы с вводом-выводом, а Task.Run - хорошо для работы с процессором. Причина этого заключается в том, что когда вы await выполняете какую-либо связанную с вводом / выводом операцию, например отправку данных по сети, вы не тратите поток на ожидание завершения такой операции. Вы можете прочитать больше об этом здесь .

0 голосов
/ 19 апреля 2020

Да, метод Task.Run - это простой способ перенести работу в фоновый поток. Рабочие потоки предоставляются классом ThreadPool. Хорошая идея - немного узнать об этом классе, узнать, что происходит, когда пул истощается, и что вы можете сделать, если ожидаете, что это произойдет (опционально можно использовать SetMinThreads).

Использование Task.Run удобнее, чем работа с экземплярами Thread напрямую. Задачи имеют строго типизированный Result, имеют свойство Exception, могут быть ожидаемыми асинхронно, могут объединяться с другими задачами и могут быть завернутые в другие задачи с дополнительными функциями (например, завершение задачи в отменяемую оболочку .

...