Почему существует ключевое слово async
Просмотр через канал 9 msdn видео Я нашел следующий ответ без ответа и надеялся, что кто-то может это объяснить?
Я не понимаю ключевое слово async. Почему бы просто не разрешить await ключевое слово в любое время метод возвращает задачу, как итераторы может возвращать любой метод, возвращающий IEnumerable.
Я уверен, что есть веская причина, я просто хотел бы понять, почему это предложение было невозможно.
Ответы
Ответ 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
.