whenall understanding method httpresponsemessage ejemplo create await async c# asynchronous

understanding - task whenall c#



Espera un método asíncrono vacío (5)

La mejor práctica es marcar la función async void solo si es método de disparo y olvidar, si desea esperar, debe marcarlo como async Task .

En caso de que aún quieras esperar, envuélvela como await Task.Run(() => blah())

¿Cómo puedo esperar a que un método void async termine su trabajo?

por ejemplo, tengo una función como la siguiente:

async void LoadBlahBlah() { await blah(); ... }

ahora quiero asegurarme de que todo se haya cargado antes de continuar en otro lugar.


La mejor solución es usar la async Task . Debe evitar el async void por varias razones, una de las cuales es la capacidad de compilación.

Si no se puede hacer que el método devuelva Task (por ej., Es un manejador de eventos), entonces puede usar SemaphoreSlim para hacer que la señal del método esté a punto de salir. Considera hacer esto en un bloque final.


No necesita hacer nada manualmente, await palabra clave pausa la ejecución de la función hasta que blah() regrese.

private async void SomeFunction() { var x = await LoadBlahBlah(); <- Function is paused //do more stuff when LoadBlahBlah() returns } private async Task<T> LoadBlahBlah() { return await blah(); <- function is paused }

T es el tipo de objeto blah() devuelve

Realmente no puedes await una función void para que LoadBlahBlah() no pueda ser void


Si puede cambiar la firma de su función para realizar una async Task , puede usar el código que se presenta here


haga un AutoResetEvent, llame a la función, luego espere en AutoResetEvent y luego configúrelo como async void cuando sepa que ya está hecho.

También puede esperar en una Tarea que regresa de su nulo asincrónico