"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Async/espera el uso: ¿tarea o nula?

Async/espera el uso: ¿tarea o nula?

Publicado el 2025-04-15
Navegar:337

Async/Await: Should I Return a Task or Void?

Valor de retorno del método async/esperanza: ¿tarea o nula?

en programación asíncrona, si el valor de retorno del método async es tarea o void tiene un impacto significativo. Este artículo explorará los escenarios que se aplica cada opción.

return tarea

generalmente, el método async debería devolver tarea . Esto permite que el código espera se llame y rastree su progreso si es necesario. La principal excepción a esta regla es cuando necesita explícitamente el tipo de retorno void , como cuando se maneja eventos.

return void

etiquétalo como "operación asincrónica de nivel superior" usando el método void return type's . Estas operaciones se comportan de manera diferente cuando ocurren excepciones. A diferencia de la tarea del valor de retorno, las excepciones en el método asincrónico void no se observan de forma predeterminada. Se convierten en excepciones no controladas y pueden activar el Taskscheduler.unobservedtaskexception .

Considere el siguiente ejemplo:

public static async void AsyncMethod2(int num)
{
    await Task.Factory.StartNew(() => Thread.Sleep(num));
}
En este ejemplo, el

async y espera Las palabras clave son innecesarias porque la excepción no es necesario que se maneje explícitamente. Sin embargo, si se produce una excepción, no se observará y no se puede manejar correctamente.

Ejemplo de manejo de excepción ]

para demostrar la diferencia en el manejo de excepciones entre

tarea y void métodos asíncronos, considere el siguiente código:

static async void f()
{
    await h();
}

static async Task g()
{
    await h();
}

static async Task h()
{
    throw new NotImplementedException();
}
if

f ] se llama a la excepción y se trata como cualquier otra excepción no controlada. Sin embargo, si g ] se llama, la excepción nunca se observa y será manejada por el controlador Taskscheduler.unobservedtaskexception , que dará como resultado un comportamiento indefinido.

Best Practices

Como una mejor práctica general, siempre return

tarea desde el método async a menos que necesite explícitamente el tipo void return. Esto garantiza que la excepción se maneje correctamente y que la persona que llama puede seleccionar espera la tarea y rastrear su progreso.

Para más detalles, consulte la documentación de Microsoft en

async / await mejores prácticas: https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/march/async-await-best-practices-in-asynchonous-programming

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3