Async / Await vs Threads
в .Net 4.5 Microsoft добавила новый Async/Await
функции для упрощения асинхронного программирования. Однако мне интересно
- можете
Async/Await
полностью заменить старый способ использованияThreads
? - и
Async/Await
способен делать все, чтоThread
могу сделать асинхронно? - можете
Async/Await
используется только с некоторыми методами, такими какWebClient.DownloadStringAsync
или я могу конвертировать любой синхронный метод, чтобы использовать егоAsync/Await
и не блокировать основной поток?
2 ответа:
может ли он полностью заменить старый способ использования потоков ?
нет. Нить может сделать гораздо больше полезных вещей. Ждут специально разработан для борьбы с что-то принимая время, большинство, как правило, запрос ввода/вывода. Что традиционно было сделано с обратным вызовом, когда запрос ввода-вывода был завершен. Написание кода, который опирается на эти обратные вызовы, довольно сложно, await значительно упрощает его.
способен делать что-либо Поток может делать асинхронно ?
ориентировочно. Await просто заботится о том, чтобы справиться с задержкой, иначе он не делает ничего, что делает поток. Ожидания выражение, что находится справа от ключевого слова await, это то, что делает работу. В идеале он вообще не использует поток, он отправляет запрос драйвера, и как только драйвер завершает передачу данных, он генерирует обратный вызов уведомления о завершении. Сеть на сегодняшний день является наиболее распространенным использованием, задержки сотни миллисекунд являются общим и неизбежным побочным эффектом сервисов, перемещающихся с рабочего стола или локальной сети в"облако". Использование таких сервисов синхронно сделало бы пользовательский интерфейс довольно невосприимчивым.
можно использовать только с некоторыми методами, такими как WebClient.DownloadStringAsync
нет. Вы можете использовать его с любым методом, который возвращает задачу. Методы XxxxAsync() являются просто предварительно обработанными в .NET framework для общих операций, которые требуют времени. Как загрузка данных с веб-сервера.
официальное заявление по этому поводу. хотя вы должны понимать различия между потоками и асинхронным программированием, прежде чем слепо заменять одни вещи другими.