Async / Await vs Threads

В .Net 4.5 Microsoft добавила новую функцию Async/Await для упрощения асинхронного кодирования. Однако, мне интересно

  1. Может ли Async/Await полностью заменить старый способ использования Threads ?
  2. Является ли Async/Await способным делать то, что Thread может делать асинхронно?
  3. Можно ли использовать Async/Await с помощью некоторых методов, таких как WebClient.DownloadStringAsync или я могу преобразовать любой синхронный метод, чтобы использовать Async/Await а не блокировать основной stream?

может ли он полностью заменить старый способ использования Threads?

Нет. Нить может сделать много полезного. Ожидание специально предназначено для решения чего-то, требующего времени, чаще всего это запрос ввода-вывода. Что традиционно было сделано с обратным вызовом, когда запрос ввода-вывода был завершен. Написание кода, который опирается на эти обратные вызовы, довольно сложно, ожидание значительно упрощает его.

способный делать то, что когда-либо Thread может делать асинхронно?

Грубо. Ожидание просто позаботится о том, чтобы иметь дело с задержкой, иначе это не делает ничего, что делает stream. Выражение ожидания, то, что находится справа от ключевого слова ожидания, – это то, что выполняет свою работу. В идеале он вообще не использует stream, он отправляет запрос драйвера, и как только драйвер завершает передачу данных, он генерирует обратный вызов уведомления о завершении. Сетевое взаимодействие на сегодняшний день является наиболее распространенным явлением, частые задержки сотен миллисекунд являются обычным явлением и неизбежным побочным эффектом услуг, перемещающихся с рабочего стола или локальной сети в «облако». Использование таких сервисов синхронно сделало бы пользовательский интерфейс совершенно невосприимчивым.

только может использоваться с некоторыми методами, такими как WebClient.DownloadStringAsync

Нет. Вы можете использовать его любым способом, который возвращает задачу. Методы XxxxAsync () являются только предположенными в платформе .NET для общих операций, требующих времени. Подобно загрузке данных с веб-сервера.

Официальное заявление по этому вопросу. Хотя вы должны понимать различия между streamами и асинхронным программированием, прежде чем слепо заменить одну вещь другими.

  • Как я узнаю, действительно ли встроенная функция заменена в том месте, где она вызывается или нет?
  • C ++ Получить имя типа в шаблоне
  • Повторяющиеся typedefs - недопустимы в C, но действительны в C ++?
  • Получение std :: ifstream для обработки LF, CR и CRLF?
  • Библиотека загрузки DLL - код ошибки 126
  • CUDA и classы
  • Ограничение типа множественного типа (ИЛИ)
  • Как удалить все обработчики событий из события
  • C ++: самый быстрый способ проверить, равны ли все элементы массива
  • OpenID: попытка получить адрес электронной почты от Google OP
  • Как преобразовать ImageSource в массив байтов?
  • Давайте будем гением компьютера.