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 и не блокировать основной поток?
2 78

2 ответа:

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

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

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

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

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

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

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