Ответ 1
может ли он полностью заменить старый способ использования потоков?
Нет. Нить может сделать много полезного. Ожидание специально предназначено для решения чего-то, требующего времени, чаще всего это запрос ввода-вывода. Что традиционно было сделано с обратным вызовом, когда запрос ввода-вывода был завершен. Написание кода, основанного на этих обратных вызовах, довольно сложно, поэтому его значительно упрощает.
способен делать то, что когда-либо Thread может делать асинхронно?
Грубо. Ожидание просто позаботится о том, чтобы иметь дело с задержкой, иначе это не делает ничего, что делает поток. Ожидающее выражение, которое находится справа от ключевого слова ожидания, - это то, что выполняет свою работу. В идеале он вообще не использует поток, он отправляет запрос драйвера, и как только драйвер завершает передачу данных, он генерирует обратный вызов уведомления о завершении. Сетевое взаимодействие на сегодняшний день является наиболее распространенным явлением, частые задержки сотен миллисекунд являются обычным явлением и неизбежным побочным эффектом услуг, перемещающихся с рабочего стола или локальной сети в "облако". Использование таких сервисов синхронно сделает пользовательский интерфейс совершенно невосприимчивым.
может использоваться только с некоторыми методами, такими как WebClient.DownloadStringAsync
Нет. Вы можете использовать его любым способом, который возвращает задачу. Методы XxxxAsync() являются только предположенными в платформе .NET для общих операций, требующих времени. Как и загрузка данных с веб-сервера.