У нас есть унаследованное приложение, которое имеет метод линии длиной 1200 строк (метод запуска потока). Метод в основном является синглом while (true), содержащим длинную последовательность предложений.Как применить рефакторинг «Метод извлечения» к фрагменту кода
Следующая C# регион присутствует около 50 раз в методе:
#region Cancel pending
if (backgroundWorkerPrincipal.CancellationPending)
{
if (CanCancelThread)
{
ev.Cancel = true;
return;
}
}
#endregion
Я задаюсь правильный (если это возможно) способ извлечения этого региона к новому методу.
Как я уже сказал, этот фрагмент (Регион) появляется около 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'. Попробуйте. –