Tengo un método que toma un argumento de devolución de llamada para ejecutar de forma asíncrona, pero el bloque catch no parece captar ninguna excepción lanzada por la llamada síncrona (this.Submit
se refiere a un método síncrono) .Capturando una excepción lanzada en una devolución de llamada asíncrona
public void Submit(FileInfo file, AnswerHandler callback)
{
SubmitFileDelegate submitDelegate = new SubmitFileDelegate(this.Submit);
submitDelegate.BeginInvoke(file, (IAsyncResult ar) =>
{
string result = submitDelegate.EndInvoke(ar);
callback(result);
}, null);
}
¿Hay alguna manera de detectar la excepción lanzada por el nuevo hilo y enviarlo al hilo original? Además, ¿es esta la forma "correcta" de manejar excepciones asíncronas? Escribí mi código por lo que se podría llamar así (asumiendo que el problema excepción es fija):
try
{
target.Submit(file, (response) =>
{
// do stuff
});
}
catch (Exception ex)
{
// catch stuff
}
pero hay una manera más adecuada o elegante de hacer esto?
El bloque de catch en su primer ejemplo de código capturará una excepción lanzada por callback o por EndInvoke.El bloque catch en su segundo ejemplo de código detectará cualquier excepción lanzada por el constructor SubmitFileDelegate o por BeginInvoke. ¿Cuál no está haciendo lo que espera/quiere que haga? – dgvid
Vaya, se olvidó de eliminar eso. Quiero que el segundo funcione correctamente, pero por el momento, tampoco lo está. – kevmo314
¿Puede mostrar cómo se define 'SubmitFileDelegate'? – GolfWolf