В чем разница Task.Run() , вызывающий async void AAA() в формах Xamarin?

#c# #wpf #xamarin #task

#c# #wpf #xamarin #задача

Вопрос:

Насколько я знаю, есть три способа вызвать метод async. (Я уверен, что их гораздо больше)

  • 1> Task.Run(async () = {...}).
  • 2> Просто вызов AAA();

и AAA должен выглядеть так

 async void AAA()
{
...
}
  
  • 3> Device.InvokeMainThread(async () => {...});

Я знаю, что если я использую вариант 1 ( Task.run ), процесс будет выполняться в фоновом потоке, а вариант 3 — нет.

Как насчет варианта 2? Это в основном потоке, если я вызвал из OnAppearing() ?
Прежде всего, нет ли проблем с таким использованием?

А опции 2 и 3 одинаковы?

Ответ №1:

  1. Выполняется AAA в потоке пула потоков.
  2. Выполняется AAA в вызывающем потоке.
  3. Выполняется AAA в основном потоке.

Кроме того, вам следует избегать методов async void .

Комментарии:

1. Большое спасибо. Это действительно полезно.