Когда я использую await в асинхронном c методе, почему он не пропускает это, чтобы он мог работать в фоновом режиме и go до следующих строк? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть следующий код:

protected override async void OnStart() {
   await Helper.PopulateMetrics();
   await Helper.LogStart();
   if (Settings.Rev == REV.No && (new[] { 15, 30, 50 }).Contains(Settings.Trk2))

Наверное, я запутался, когда устанавливал точку останова в await Helper.LogStart () Я вижу эту точку останова перед строкой, начинающейся с "if (Настройки ... "

как ожидать появления кода после тех, которые не были вызваны первыми?

Вот как выглядит метод LogStart ():

 public static async Task LogStart()
 {
     // code
     await App.CDB.InsertLogItem(logStart);
 }

В идеале я хотел бы, чтобы эти два метода просто запускались в фоновом режиме один за другим, пока код сразу их пропускает.

Ответы [ 2 ]

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

Ключевое слово await заставляет выполнение ждать, пока не завершится функция Helper.LogStart(). Если вы хотите продолжить выполнение, вы можете сохранить возвращенный объект Task в другой переменной и await для нее позже:

var task = Helper.LogStart();
/* something else */
await task;
1 голос
/ 21 февраля 2020

Когда мы используем await, это не значит, что он пропускает этот код и запускается в фоновом режиме. Когда у нас будет await в этом месте, будет создан новый дочерний поток, и этот новый поток будет обрабатывать выполнение PopularMatrics () , но основной поток будет ждать, пока дочерний поток завершит свою работу.

...