我有与服务器通信的 C++ 应用程序。它将一些数据发布到服务器,当我处理服务器故障的异常时,我遇到了这个问题。当服务器出现问题时,我需要处理连接引发的异常,并尝试重新连接到服务器。我在下面发布了相关的伪代码:
try {
publisher->publishData(data);
} catch (const ServerDownException& ex) {
//handle error, reconnect and create a new session
}
我担心的是,在处理此异常时,我需要重新连接并再次创建会话。再次创建会话的代码可能会引发异常。所以错误处理代码会在原来的catch块内再次有一个try-catch块,如下:
try {
publisher->publishData(data);
} catch (const ServerDownException& ex) {
publisher->initialize();
publisher->openSocket();
try {
publisher->createSession();
} catch (const SessionException& tx) {
//session creation error
}
publisher->publishData(data);//after re-connecting, publish data again
}
我的问题是,像这样嵌套 try - catch 可以吗?否则这只是糟糕的设计吗?如果是这样,实现这一目标的最佳方法是什么?
PS.:我的代码是用 C++ 编写的,但我想这个问题很笼统。谢谢你。