Esperan y async en la misma linea.

Entiendo cómo funciona async y cómo se compara con las promesas de javascript, pero no estoy seguro de cómo una línea como la de abajo podría tener algún beneficio

IdentityResult result = await UserManager.CreateAsync(user, model.password); 

ya que estamos creando una llamada asíncrona e inmediatamente esperando en el subproceso para que las líneas que siguen no se ejecuten hasta que se completen las llamadas asíncronas.

La ventaja es que si esa operación es realmente asíncrona, en algún momento se liberará al subproceso que realiza la llamada para que realice otro trabajo en su aplicación en lugar de bloquearse de forma síncrona.

Ese tipo de uso trae mayor escalabilidad.

Todavía estás esperando hasta que la operación se complete antes de continuar. Los métodos asíncronos no se ejecutan mágicamente más rápido, pero potencialmente usan menos recursos y, por lo general, puede ejecutar varios simultáneamente.

Si imaginamos que CreateAsync tiene este aspecto:

 async Task CreateAsync() { // do something await Task.Delay(1000); // do something else } 

Luego, a la await Task.Delay(1000) un hilo y esperas de forma asíncrona en lugar de mantenerlo por un segundo. Ese hilo puede ejecutar otras operaciones de CPU en su proceso y evitar un cambio de contexto.

Si CreateAsync se implementa correctamente, entonces hay una operación asíncrona real en lugar de esa Task.Delay

Supongamos que tiene una interfaz de usuario y se llama a su función UserManager.CreateAsync cada vez que se presiona un botón.

No conozco la función CreateAsync, pero como es Async y espera, supongo que el diseñador pensó que tomaría el tiempo suficiente para realizarla de forma asíncrona.

Si CreateAsync tomara un minuto y no fuera posible, entonces su interfaz de usuario estaría muerta por un minuto.

Usando este método, su interfaz todavía sería sensible. Si usó un parámetro CancelToken en CreateAsync, la interfaz de usuario podría incluso decidir cancelar la tarea, por ejemplo, para cerrar el progtwig.