我有一个正在调用的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.
                }
            }
        }
    }
}

最佳答案

您可以循环执行。

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);
}

关于c# - 如何改善此异常重试方案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2270271/

10-13 05:25