Async/Await vs Threads

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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