Перехват исключения, вызванного асинхронным обратным вызовом

У меня есть метод, который принимает аргумент обратного вызова для асинхронного выполнения, но блок catch, похоже, не улавливает никаких исключений, созданных синхронным вызовом ( this.Submit относится к синхронному методу).

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);
}

Есть ли способ перехватить исключение, созданное новым потоком, и отправить его в исходный поток? Кроме того, является ли это «правильным» способом обрабатывать асинхронные исключения? Я написал свой код таким образом, чтобы его можно было вызывать следующим образом (при условии, что проблема с исключением исправлена):

try
{
    target.Submit(file, (response) =>
    {
        // do stuff
    });
}
catch (Exception ex)
{
    // catch stuff
}

но есть ли более правильный или элегантный способ сделать это?

9
задан Mo Patel 22 May 2013 в 15:46
поделиться