我目前正在使用Cook Computing XmlRpc库集成两个系统,并从其中一个系统返回一些混乱的响应。
该系统的开发人员向我保证,这是他们的结果,并且问题将在4月初之前得到解决。可以想象,如果一个系统碰巧得到更新而另一个系统返回错误响应,那么我的同步问题非常严重。
无论如何,直到4月我基本上必须重试每次调用系统,直到它没有返回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,因为它是有点错误的代码,即使用控件+无限循环的异常)