Является ли async / await все еще полезным, даже если мой метод не использует параллелизм? - PullRequest
0 голосов
/ 18 января 2020

Я понимаю, что async / await не использует настоящий параллелизм, и его можно использовать для лучшего использования ресурсов потока через параллелизм. Кроме того, я знаю, что могу создать параллелизм в методе, используя «await» следующим образом:

static async Task Main(string[] args)
{
    var task1= DoTask1Async(2);
    DoSomething();
    await task1;
}

С другой стороны, приведенный ниже код не генерирует параллелизм, он будет выполняться аналогичным образом. к обычному (без использования async / await). Но полезен ли этот метод для системы в целом (поток мог бы лучше использоваться другими задачами), или этот код просто бесполезен?

static async Task Main(string[] args)
{
     await DoTask1Async(2);
     DoSomething();
}

1 Ответ

1 голос
/ 20 января 2020

Существует два основных преимущества для async / await:

  1. Отзывчивый пользовательский интерфейс (для приложений пользовательского интерфейса).
  2. Более масштабируемые сервисы (для внутренних приложений).

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

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

...