コールバック引数を非同期に実行するメソッドがありますが、キャッチブロックは同期呼び出しによってスローされた例外をキャッチしていないようです(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
}
をこれを行うには、より適切かエレガントな方法があります:それは(例外の問題は固定されていると仮定して)、このように呼ばれることができるよう、私は私のコードを書きましたの?
最初のコードサンプルのcatchブロックは、コールバックまたはEndInvokeによってスローされた例外をキャッチします。2番目のコードサンプルのcatchブロックは、SubmitFileDelegateコンストラクターまたはBeginInvokeによってスローされた例外をキャッチします。あなたが期待していること/したいことをしていない人はどれですか? – dgvid
おっと、削除するのを忘れました。私は第二のものが正しく働くことを望みますが、現時点ではどちらもありません。 – kevmo314
'SubmitFileDelegate'の定義方法を教えてください。 – GolfWolf