BackgroundWorker的任务并行库替换?

Kei*_*h G 82 c# backgroundworker winforms task-parallel-library

任务并行库是否有任何可以被认为是对BackgroundWorker类的替换或改进?

我有一个带有向导式UI的WinForms应用程序,它执行一些长时间运行的任务.我希望能够使用标准进度条和取消操作的响应式UI.我之前用BackgroundWorker做过这个,但是我想知道是否有一些可以使用的TPL模式?

Ste*_*ary 90

Task堂课是对...的改进BackgroundWorker; 它自然支持嵌套(父/子任务),使用新的取消API,任务延续等.

我在我的博客上有一个例子,展示了旧BackgroundWorker的做事方式和新Task的做事方式.对于需要报告进度的任务,我确实有一个小助手类,因为我发现语法相当笨拙.该示例涵盖结果值,错误条件,取消和进度报告.

  • @PanagiotisKanavos:你可以将任意对象传递为`userState`.然而,自我上次评论以来的2.5年中,`Task`已经补充了`IProgress <T>`和`Progress <T>`,它们比"BackgroundWorker"的进展更清晰,更容易.在现代代码中,没有理由再使用`BackgroundWorker`了. (5认同)
  • 几天前,我写了一篇[各种背景处理技术的比较](http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html).`BackgroundWorker`具有更容易的进度报告,而`Task`允许嵌套.在这两个中,我更喜欢"任务"(清理进度报告要比允许嵌套更容易).不过,他们比其他常见解决方案都要轻松多年.当我听到人们使用`Thread`或`ThreadPool.QueueUserWorkItem`时,我感到畏缩.对于后台任务来说,它们是最难正确使用的. (2认同)

小智 23

后台工作者仍然是实现这一目标的有效方法 - 如果你同时运行多个大型操作,那么并行扩展将值得考虑,如果只是那个,那么我会坚持使用后台工作者.

  • Bgw将从改进的ThreadPool中获益 (2认同)