0

此代码在 BackgroundWorker 的 DoWork 事件处理程序中调用,我正在创建一个 WCF 客户端并在 try 块中使用它,如果有异常我想在从处理程序返回之前中止并重试 5 次。

    private void WorkerDoWork(object sender, DoWorkEventArgs e)
    {            
        var mmc = new ServiceClient();

        try
        {
            e.Result = mmc.SubmitData(measure);
        }
        catch (Exception)
        {
            mmc.Abort();

            mmc = new ServiceClient();

            var counter = 0;

            while ((bool)e.Result == false && counter++ < 5)
            {
                try
                {
                    e.Result = mmc.SubmitData(measure);
                }
                catch (Exception)
                {
                    mmc.Abort();
                    mmc = new ServiceClient();
                }
            }
        }
        finally
        {
            if (mmc.State == CommunicationState.Faulted)
            {
                mmc.Abort();
            }
            else
            {
                mmc.Close();
            }
        }
     }

我对代码不是很满意,感觉它有些可疑!特别是嵌套的 try/catch。

这段代码可以吗?还是我应该重构它?

4

1 回答 1

2

是的,我同意盲目地锤击 Web 服务是问题所在。

很高兴知道您可以处理哪些可能的异常。

看起来您只是在处理无法访问的端点,而您可能会收到有关数据格式、类型、限制、限制、身份验证失败、帐户使用限制命中等任何信息的警告!

但是一切都被视为重试可以修复它,如果没有,它就坏了!

关于遇到的问题的一些报告怎么样?

作为一个优秀的程序员,你应该找出在什么情况下会抛出什么异常,并尽可能以适当的方式处理它们。
如果您无法处理它们,则将它们报告给日志记录或用户(如果它是交互式的)。

于 2012-07-31T09:55:54.317 回答