Подтвердить что ты не робот

Почему существует ключевое слово async

Просмотр через канал 9 msdn видео Я нашел следующий ответ без ответа и надеялся, что кто-то может это объяснить?

Я не понимаю ключевое слово async. Почему бы просто не разрешить await ключевое слово в любое время метод возвращает задачу, как итераторы может возвращать любой метод, возвращающий IEnumerable.

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

4b9b3361

Ответ 1

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

Полное объяснение здесь: http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx

Ответ 2

Я думаю, что, возможно, в этой статье рассматриваются рассуждения:

http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx

В первом абзаце говорится:

Несколько человек спросили меня, что мотивирует дизайнерское решение требуется любой метод, который содержит выражение "ожидание", которое должно быть префиксом с контекстным ключевым словом "async".

В заключение:

Это множество плюсов и минусов; после оценки всех из них и много игр с прототипом компилятора, чтобы увидеть, как он себя чувствует, дизайнеры С# решили установить "асинхронный" метод, который содержит "ожидание". Я думаю, что разумный выбор.

Недостаточно обратной совместимости.

Дальнейшее чтение:

http://blogs.msdn.com/b/ericlippert/archive/2010/10/29/asynchronous-programming-in-c-5-0-part-two-whence-await.aspx

Ответ 3

Для меня наиболее убедительной причиной является то, что значение оператора return изменяется, когда функция становится async. Без asnyc return x означает "вернуть задачу со значением x", а с помощью async это означает "установить результат задачи на x.

Ответ 4

Я написал в своем блоге некоторое время назад резюме вопросов по ключевому слову async/await.

Здесь вывод раздела "Вывод async":

Эрик Липперт имеет окончательный пост по этому вопросу. Он также обсуждался в комментариях к блогу, Channel9, и forums.

Подводя итог, ключевое слово с одним словом await было бы слишком большим для изменения разрыва. Выбор был между ожиданием нескольких слов (например, await for) или ключевым словом метода (async), который включал бы ключевое слово await только внутри этого метода. Явные методы маркировки async проще для людей и компьютеров для анализа, поэтому они решили пойти с парой async/await.