Должен ли я использовать класс BackgroundWorker для обработки очереди задач, если у меня нет пользовательского интерфейса?

Я использую .Net 3.5 (C#), и у меня есть очередь задач, которые я хочу запускать одну за другой, я делаю это с помощью класса BackgroundWorker (с его методами и свойством DoWork, RunWorkerCompleted и IsBusy).
1. Рекомендуется ли использовать класс BackgroundWorker, если у меня нет пользовательского интерфейса? почему?
2. Я слышал, что класс BackgroundWorker устарел, правда ли это? кто-нибудь знает, почему?
3. Есть ли другой класс, который может помочь мне сделать то, что я упомянул выше?
Спасибо!

P.S.
Я запускаю вторую задачу сразу после завершения первой.


person menacheb    schedule 29.12.2011    source источник
comment
Я бы использовал какую-то пользовательскую или существующую многопоточную систему заданий. Это может быть намного проще в использовании, чем BackGroundWorker.   -  person CodingBarfield    schedule 29.12.2011


Ответы (2)


Если у вас нет пользовательского интерфейса, нужна ли вам какая-либо сортировка в другой поток? Если вы запускаете задачи одну за другой, я бы просто вызывал их напрямую, если вам нужно сделать что-то более сложное. Если вы знаете, что вам нужно сделать это в отдельной теме, опубликуйте более подробную информацию о ваших требованиях (в том числе о том, что это за проект).

Насколько я знаю, BackgroundWorker вообще не устарел. В C# 5 это станет несколько менее важным из-за новых асинхронных функций, но, насколько мне известно, его все еще можно использовать без проблем.

person Jon Skeet    schedule 29.12.2011

Класс BackgroundWorker просто обеспечивает более простой способ использования потоков. Это имеет некоторое отношение к пользовательскому интерфейсу. Пожалуйста, ознакомьтесь с ответом Джона Скита и его комментариями. Итак, вы можете продолжать его использовать.

Я слышал, что класс BackgroundWorker устарел, это правда?

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx не упоминает, что BackgroundWorker устарел. Таким образом, он не устарел.

person P.K    schedule 29.12.2011
comment
Ну, это имеет определенное отношение к контекстам синхронизации, которые чаще всего используются с пользовательскими интерфейсами. Я не думаю, что лично когда-либо видел что-либо вне контекста пользовательского интерфейса. Вы, из интереса? - person Jon Skeet; 29.12.2011
comment
Кроме того, документация знакомит с BackgroundWorker: класс BackgroundWorker позволяет выполнять операцию в отдельном выделенном потоке. Отнимающие много времени операции, такие как загрузка и транзакции базы данных, могут привести к тому, что ваш пользовательский интерфейс (UI) перестанет отвечать на запросы во время их работы. Если вам нужен отзывчивый пользовательский интерфейс и вы сталкиваетесь с длительными задержками, связанными с такими операциями, класс BackgroundWorker предоставляет удобное решение. Так что сказать, что это не имеет никакого отношения к пользовательскому интерфейсу, — это преувеличение, ИМО. - person Jon Skeet; 29.12.2011
comment
@Jon Skeet Я не знаю, как фоновая работа связана с контекстом синхронизации. Не могли бы вы предоставить какие-либо указатели - person P.K; 29.12.2011
comment
Когда вы сообщаете о ходе выполнения и т. д., он использует контекст синхронизации, полученный при создании фонового рабочего процесса. Вот как ему удается вернуться к потоку пользовательского интерфейса. - person Jon Skeet; 29.12.2011