Suponga que tiene 2 tareas, lo que no implica ninguna E / S (en una máquina multiprocesador). En este caso, los subprocesos superan a Async. Porque Async, como un programa de un solo hilo, ejecuta sus tareas en orden. Pero los subprocesos pueden ejecutar ambas tareas simultáneamente.
Suponga que tiene 2 tareas, que involucran IO (en una máquina multiprocesador). En este caso, tanto Async como Threads funcionan más o menos igual (el rendimiento puede variar según la cantidad de núcleos, la programación, la intensidad del proceso de la tarea, etc.). Además, Async requiere menos cantidad de recursos, menos gastos generales y menos complejo de programar sobre un programa de subprocesos múltiples.
¿Cómo funciona? El subproceso 1 ejecuta la Tarea 1, ya que está esperando IO, se mueve a la cola de espera IO. De manera similar, el subproceso 2 ejecuta la Tarea 2, dado que también involucra IO, se mueve a la cola de espera de IO. Tan pronto como se resuelve su solicitud de E / S, se mueve a la cola lista para que el programador pueda programar el hilo para su ejecución.
Async ejecuta la Tarea 1 y sin esperar a que se complete su IO, continúa con la Tarea 2 y luego espera a que IO de ambas tareas se complete. Completa las tareas en el orden de finalización IO.
Async más adecuado para tareas que involucran llamadas de servicio web, llamadas de consulta de base de datos, etc., subprocesos para tareas intensivas en procesos.
El siguiente video explica sobre Async vs Threaded model
y también cuándo usar, etc.,
https://www.youtube.com/watch?v=kdzL3r-yJZY
Espero que esto sea útil.