我目前正在使用 Cook Computing XmlRpc 库集成两个系统,并且从其中一个系统返回一些混乱的响应。
该系统的开发人员向我保证,这已经结束,问题要到四月初才能解决。正如您可以想象的那样,如果一个系统发生更新而另一个系统返回错误的响应,我就会遇到非常严重的同步问题。
无论如何,直到四月,我基本上必须重试对系统的每次调用,直到它不返回 XmlRpcIllFormedXmlException。由于这个问题是完全间歇性和暂时的,它通常在最终工作之前失败约 1-3 次,但是我已经看到 10 多次重试,所以这些数字绝不是最大值。
我为处理这种可怕的场景而编写的代码开始让我担心,因为我正在有效地编写一个无限循环,并为控制流进行异常处理,但我看不到任何其他方法!
所以我的问题是:我所做的事情有什么本质上的错误吗?这会在下个月给我带来一些严重的问题吗?
while(true)
{
try
{
XmlRpcStruct data = // AnyDataQuery
if(data.Count() > 0)
return new Contacts(data);
else
return null;
}
catch(XmlRpcIllFormedXmlException)
{
// Ensure we have not hit maximum retries.
// Sleep thread for 500ms to avoid hitting api limit (this is no the ui thread)
// Swallow exception and retry.
}
}
我只想重申,在有人问为什么数据会被注释填充之前,这不是我的代码的问题;p 这只是对系统的任何调用的包装器的一般格式。
我还在实际代码中跟踪重试,以避免达到 API 调用限制。
(如果这属于代码审查,请移动它!我觉得它属于 SO,因为它有点错误的代码,即使用异常进行控制 + 无限循环)