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 для общих операций, которые требуют времени. Как загрузка данных с веб-сервера.
официальное заявление по этому поводу. хотя вы должны понимать различия между потоками и асинхронным программированием, прежде чем слепо заменять одни вещи другими.