Будет ли ожидание в OnAppearing означать, что экран, на который я перехожу, будет отображаться немедленно? - PullRequest
1 голос
/ 21 февраля 2020

Если у меня есть этот код:

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        await DoLengthDatabaseTaskAsync(); // takes 30 seconds
    }

Будет ли тот факт, что это задача Asyn c, означать, что экран появляется быстро и не ожидает завершения задачи базы данных?

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        await CallAndForgetAboutOutputTaskAsync(); // takes 30 seconds
    }

Как насчет того, если меня не касается "позвони и забудь" о завершении метода CallAndForgetAboutOutputTaskAsyn c ().

Есть ли способ запустить CallAndForgetAboutOutputTaskAsyn c () в фоновом режиме, чтобы экран появлялся как можно скорее

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Да и нет.

OnAppearing означает, что страница появилась на экране и работает сразу после этого. Поэтому выполнение чего-либо там не будет замедлять работу.

Однако вы должны иметь в виду, что OnAppearing выполняется в потоке пользовательского интерфейса и в зависимости от структуры вашего CallAndForgetAboutOutputTaskAsync() может заморозить ваш пользовательский интерфейс, но Простые маги c из Task.Run решают проблему.

РЕДАКТИРОВАТЬ: Таким образом, это должно быть как:

Task CallAndForget()
{
  return Task.Run(async() => await action());
}
0 голосов
/ 22 февраля 2020

Использование await освобождает поток пользовательского интерфейса, возвращая выполнение вызывающему методу. Теоретически это позволит интерфейсу продолжать функционировать, пока CallAndForgetAboutOutputTaskAsync() делает свое дело. В этом случае Task.Run() не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...