Я пишу синхронный метод, который вызывает асинхронный метод на другом сервере. Метод сервера вызывает обратный вызов, когда это сделано, и в случае ошибки один из аргументов обратного вызова содержит исключение. Я хотел бы выбросить исключение из моего метода, за исключением исключения сервера как его 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...
}
}