我正在寫一個同步方法,在另一臺服務器上調用異步方法。服務器的方法在完成時調用回調函數,並且在出現錯誤的情況下,回調參數中的一個包含異常。我想從我的方法拋出一個異常,將服務器的異常作爲它的InnerException。然而,爲了捕捉到這個例外,我必須把它裝箱,似乎應該有一個更簡單的方法。這是代碼味道嗎?我應該怎麼做更簡單?我應該如何處理異步方法中引發的異常? (或者,這是一個代碼的氣味?)
我的代碼是這樣的:
private class BoxedException
{
public Exception Exception;
}
public bool MyMethod()
{
EventWaitHandle waitHandle = new new EventWaitHandle(false, EventResetMode.ManualReset);
BoxedException boxedException = new BoxedException();
bool called = theServer.ServerMethod(getCallback(waitHandle, boxedException));
if (called)
{
waitHandle.WaitOne();
if (boxedException.Exception != null)
throw new Exception("ServerMethod failed", boxedException.Exception);
}
}
private ServerCallback getCallback(EventWaitHandle waitHandle, BoxedException be)
{
return (object sender, ServerArgs e) =>
{
handleServerArgs(e, be);
waitHandle.Set();
};
}
private void handleServerArgs(ServerArgs e, BoxedException be)
{
if (e.Exception != null)
{
be.Exception = e.Exception;
}
else
{
// do stuff...
}
}
爲真,但是不能使用編輯並繼續。 – Simon