我正在编写一个在另一台服务器上调用异步方法的同步方法。服务器的方法完成后调用回调,如果出现错误,回调的参数之一包含异常。我想从方法中抛出一个异常,将服务器的异常作为其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...
}
}