私は現在、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に属していると感じました)