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 .
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.
async /
await mejores prácticas:
https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/march/async-await-best-practices-in-asynchonous-programming
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