此代码在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。
这段代码好吗?或者我应该重构它?
答案 0 :(得分:2)
是的,我同意盲目地锤击网络服务是个问题。
很高兴知道您可以处理哪些可能的异常。
这看起来你只是处理一个无法访问的端点,而你可能会收到有关数据格式,类型,限制,限制,身份验证失败,帐户使用限制命中,任何事情的警告!
但eveything被视为重试会修复它,如果没有,它就会破坏!
如何报道遇到的问题?
作为一名优秀的程序员,你应该找出在什么情况下会抛出什么异常并以适当的方式处理它们。如果可以的话。 如果您无法处理它们,请将它们报告给日志记录或用户(如果它是交互式的)。