私が呼び出している Web サービス メソッドは、サード パーティ製で、私のドメイン外にあります。何らかの理由で、Web サービスがゲートウェイ タイムアウトで失敗することがあります。これは断続的に発生し、失敗した試行の直後に呼び出すと成功することもあります。
今、私はコーディングのジレンマに陥っています。うまくいくはずのコードはありますが、以下に示すように、そのコードは素人レベルの出来です。
これは本当に悪いコードでしょうか、それとも使用方法を考慮すると許容できるものなのでしょうか? 許容できない場合は、どのように改善すればよいでしょうか?
ぜひ真顔で見てみてください。
try
{
MDO = OperationsWebService.MessageDownload(MI);
}
catch
{
try
{
MDO = OperationsWebService.MessageDownload(MI);
}
catch
{
try
{
MDO = OperationsWebService.MessageDownload(MI);
}
catch
{
try
{
MDO = OperationsWebService.MessageDownload(MI);
}
catch
{
try
{
MDO = OperationsWebService.MessageDownload(MI);
}
catch (Exception ex)
{
// 5 retries, ok now log and deal with the error.
}
}
}
}
}
ベストアンサー1
ループで実行できます。
Exception firstEx = null;
for(int i=0; i<5; i++)
{
try
{
MDO = OperationsWebService.MessageDownload(MI);
firstEx = null;
break;
}
catch(Exception ex)
{
if (firstEx == null)
{
firstEx = ex;
}
Thread.Sleep(100 * (i + 1));
}
}
if (firstEx != null)
{
throw new Exception("WebService call failed after 5 retries.", firstEx);
}