このコードは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。
このコードは大丈夫ですか?または、リファクタリングする必要がありますか?