¿Puede reemplazar completamente la antigua forma de usar Threads?
No. Un hilo puede hacer muchas más cosas útiles. Await está diseñado específicamente para lidiar con algo que toma tiempo, generalmente una solicitud de E / S. Lo que tradicionalmente se hacía con una devolución de llamada cuando se completaba la solicitud de E / S. Escribir código que se base en estas devoluciones de llamada es bastante difícil, await lo simplifica enormemente.
capaz de hacer lo que un hilo puede hacer de forma asincrónica?
Aproximadamente. Await solo se encarga de lidiar con el retraso, de lo contrario no hace nada de lo que hace un hilo. La expresión de espera , que está a la derecha de la palabra clave de espera, es lo que hace el trabajo. Idealmente, no usa un hilo en absoluto, publica una solicitud de controlador y una vez que el controlador completa la transferencia de datos, genera una devolución de llamada de notificación de finalización. La conexión en red es, con mucho, el uso más común, las latencias de cientos de milisegundos son comunes y un efecto secundario inevitable de los servicios que se mueven desde el escritorio o una LAN a "la nube". El uso de estos servicios de forma sincrónica haría que una interfaz de usuario no respondiera.
solo se puede usar con algunos métodos como WebClient.DownloadStringAsync
No. Puede usarlo con cualquier método que devuelva una tarea. Los métodos XxxxAsync () son solo métodos precocinados en el marco .NET para operaciones comunes que requieren tiempo. Como descargar datos de un servidor web.