2010-08-18 1 views
75

Есть ли в параллельной библиотеке задачи что-либо, что считается заменой или улучшением над классом BackgroundWorker?Задание параллельной замены библиотеки для BackgroundWorker?

У меня есть приложение WinForms с пользовательским интерфейсом в стиле мастера, и он выполняет некоторые длительные задачи. Я хочу иметь адаптивный пользовательский интерфейс со стандартным индикатором выполнения и возможностью отменить операцию. Я сделал это раньше с BackgroundWorker, но мне интересно, есть ли некоторые шаблоны TPL, которые можно использовать вместо этого?

+0

Также см. Http://stackoverflow.com/questions/4054263/how-does-c-sharp-5-0s-async-await-feature-differ-from-the-tpl и http://stackoverflow.com/questions/12414601/async-await-vs-backgroundworker – nawfal

ответ

87

Класс Task является улучшением по сравнению с BackgroundWorker; он, естественно, поддерживает вложенность (родитель/потомок задач), использует новый API отмены, продолжения задачи и т.д.

I have an example on my blog, показывая старый BackgroundWorker способ делать вещи и новый Task способа делать вещи. У меня есть небольшой вспомогательный класс для задач, которые должны сообщать о прогрессе, потому что я считаю, что синтаксис довольно неудобен. В этом примере представлены значения результата, условия ошибки, аннулирование и отчет о ходе выполнения.

+0

Трудное решение между этим и ответом Хэтча, так как его технически правильный ответ. Тем не менее, ваш блог показывает, как использовать новый класс Task, и это действительно то, что я искал - эволюция от BackgroundWorker. Я использую ваш пример в качестве основы для кода в своем приложении. –

+2

Несколько дней назад я написал [сравнение различных методов обработки фона] (http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html). «BackgroundWorker» имеет более легкую отчетность о проделанной работе, а «Задача» позволяет вложенность. Из этих двух я предпочитаю «Задачу» (это намного легче очистить отчет о ходе работы, чем разрешить вложенность). Тем не менее, оба года вперед опережают другие распространенные решения. Я сжимаю, когда слышу людей, использующих «Thread» или «ThreadPool.QueueUserWorkItem». Они являются абсолютно трудными для правильного использования фоновых задач. –

+0

Простой отчет о прогрессе? Только если вы хотите сообщить процент. Для отчетности чего-либо еще требуется begininvoke или SynchronizationContext.Post уродство –

23

Фоновый работник по-прежнему является действительным способом достижения этого - если вы одновременно выполняете несколько больших операций, то параллельные расширения стоили бы рассмотреть, если бы это было просто одно, то я бы придерживался фонового работника.

+2

И Bgw получит прибыль от улучшенного ThreadPool –

 Смежные вопросы

  • Нет связанных вопросов^_^