0

我目前正在使用 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,因为它有点错误的代码,即使用异常进行控制 + 无限循环)

4

0 回答 0