Estoy usando Async CTP para escribir una aplicación de consola IO pesada. Pero estoy teniendo problemas con excepciones.Manejo de excepciones asíncronas con void
public static void Main()
{
while (true) {
try{
myobj.DoSomething(null);
}
catch(Exception){}
Console.Write("done");
//...
}
}
//...
public async void DoSomething(string p)
{
if (p==null) throw new InvalidOperationException();
else await SomeAsyncMethod();
}
Y ocurre lo siguiente: "hecho" se escribe en la consola, entonces consigo la excepción en el depurador, a continuación, presiono continuar existe mi programa.
¿Qué ofrece?
No puedo llamar a t.Wait(), ya que bloquea el hilo de la consola principal, por lo que no puedo ingresar nada más, por lo que SomeAsyncMethod nunca terminará (para mi uso, consulte: http://stackoverflow.com/questions/6145246/how-to-write-c-5-async) – TDaver
¡Pero lo he descubierto! No ESPERO mis tareas, las pongo en una lista, y después de cada operación IO (cuando pueden arrojar excepciones) ¡reviso la lista si alguna de las tareas falló! – TDaver
Sí, generalmente es mejor iniciar todas las tareas, recopilarlas en una lista y luego en TaskEx.WhenAll (listOfTasks) .Wait() cuando desee recopilar todo el trabajo –