1200行のメソッド(スレッドの実行メソッド)を持つ従来のアプリケーションがあります。この方法は、文の長いシーケンスを含む単一の(真の)ものである。コードに「抽出メソッド」リファクタリングを適用する方法
次のC#の領域は、この方法で約50倍存在する:
#region Cancel pending
if (backgroundWorkerPrincipal.CancellationPending)
{
if (CanCancelThread)
{
ev.Cancel = true;
return;
}
}
#endregion
I新しい方法には、この領域を抽出するための正しい(可能な場合)方法を思っています。
私が言ったように、その断片(領域)は、この方法の中で約50回出現する。 #region内での返品に注意してください(これは終了します)。
ので、この方法は、以下の構造を有する:
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs ev)
while(true) {
...
#region Cancel pending
if (backgroundWorkerPrincipal.CancellationPending)
{
if (CanCancelThread)
{
ev.Cancel = true;
return;
}
}
#endregion
...
#region Cancel pending
if (backgroundWorkerPrincipal.CancellationPending)
{
if (CanCancelThread)
{
ev.Cancel = true;
return;
}
}
#endregion
...
#region Cancel pending
if (backgroundWorkerPrincipal.CancellationPending)
{
if (CanCancelThread)
{
ev.Cancel = true;
return;
}
}
#endregion
...
#region Cancel pending
if (backgroundWorkerPrincipal.CancellationPending)
{
if (CanCancelThread)
{
ev.Cancel = true;
return;
}
}
#endregion
...
#region Cancel pending
if (backgroundWorkerPrincipal.CancellationPending)
{
if (CanCancelThread)
{
ev.Cancel = true;
return;
}
}
#endregion
.
.
.
}
}
これは実際にはjavaとタグ付けする必要がありますか? – nbrooks
@nbrooksいいキャッチ。 –
.net 4.5では、この 'BackgroundWorker'を' Task'、 'async'と' await'に置き換えることができます。試してみる。 –