может ли он полностью заменить старый способ использования потоков?
Нет. Нить может делать гораздо больше полезных вещей. Await специально разработан, чтобы иметь дело с чем-то, что требует времени, чаще всего с запросами ввода-вывода. Что традиционно делалось с обратным вызовом, когда запрос ввода-вывода был завершен. Написание кода, который полагается на эти обратные вызовы, довольно сложно, await значительно его упрощает.
способен делать то, что поток может делать асинхронно?
Примерно. Await просто заботится о задержке, иначе он не делает ничего, что делает поток. Выражение await справа от ключевого слова await - это то, что выполняет свою работу. В идеале он вообще не использует поток, он отправляет запрос драйвера, и как только драйвер завершает передачу данных, он генерирует обратный вызов уведомления о завершении. Работа в сети - это, безусловно, наиболее распространенное использование, задержки в сотни миллисекунд являются обычным явлением и являются неизбежным побочным эффектом при перемещении сервисов с настольных компьютеров или локальной сети в «облако». При синхронном использовании таких сервисов пользовательский интерфейс не будет отвечать на запросы.
может использоваться только с некоторыми методами, такими как WebClient.DownloadStringAsync
Нет. Вы можете использовать его с любым методом, возвращающим Task. Методы XxxxAsync () - это просто предварительно подготовленные методы в .NET framework для обычных операций, требующих времени. Как загрузка данных с веб-сервера.