0

私は現在、Cook Computing XmlRpc ライブラリを使用して 2 つのシステムを統合する作業を行っており、これらのシステムの 1 つから厄介な応答が返されています。

このシステムの開発者は、これは彼らの終わりであり、問​​題は 4 月の初めまで修正されないことを私に保証しました。ご想像のとおり、1 つのシステムがたまたま更新され、もう 1 つのシステムが悪い応答を返した場合、非常に深刻な同期の問題が発生しています。

とにかく、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に属していると感じました)

4

0 に答える 0