Есть ли разница между `return SomeFuncAsync ()` и `await SomeFuncAsync (); возвращение; `? - PullRequest
0 голосов
/ 14 сентября 2018

Проще говоря, являются ли эти две функции функционально одинаковыми?

async Task SomeFuncAsync()
{
  await Task.Delay(1000);
}

async Task Foo1()
{
  await BarAsync();
  return SomeFuncAsync();
}

async Task Foo2()
{
  await BarAsync();
  await SomeFuncAsync();
}

Если нет, в чем разница?

(Обратите внимание, что это немного отличается от это и это , потому что я не рассматриваю возможность удаления async из моей подписи функции. Если это дубликат, пожалуйста, ссылку, и я удалю.)

1 Ответ

0 голосов
/ 14 сентября 2018

Первый Foo1 возвращает задачу, завернутую в задачу.

async Task Foo1()
{
  await BarAsync();
  return SomeFuncAsync();
}

Это потому, что async Task сигнатура обернет результат в Task как возвращаемое значение. Это происходит потому, что вы не ожидаете результата. Правильный тип возврата в сигнатуре должен быть Task<Task>, а не Task>, потому что код что-то возвращает (в данном случае Задача).

async Task<Task> Foo1()
{
  await BarAsync();
  return SomeFuncAsync();
}

Как только вы исправите тип возврата в этом методе, разница между ним и следующим методом станет более очевидной. Первый возвращает Task, завернутый в Task, а следующий просто возвращает Task.

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