任务并行库中是否有任何东西被认为是对BackgroundWorker类的替代或改进?
我有一个带有向导式UI的WinForms应用程序,它执行一些长期运行的任务。我希望能够拥有一个带有标准进度条的响应式UI,并能够取消该操作。我之前使用BackgroundWorker做到了这一点,但是我想知道是否可以使用某些TPL模式来代替?
Answers:
该Task
下课的改善BackgroundWorker
; 它自然支持嵌套(父/子任务),使用新的取消API,任务继续等。
我的博客上有一个示例,展示了旧BackgroundWorker
的做事方式和新Task
的做事方式。我确实有一个小的帮助程序类,用于需要报告进度的任务,因为我觉得语法很尴尬。该示例涵盖了结果值,错误条件,取消和进度报告。
BackgroundWorker
具有更容易的进度报告,同时Task
允许嵌套。在这两个,我更喜欢Task
(这是很多容易清理进度报告而不是允许嵌套)。但是,它们都比其他常见解决方案快了几年。当我听到有人使用Thread
或时,我会感到畏缩ThreadPool.QueueUserWorkItem
。它们绝对是最难正确使用的后台任务。
userState
。但是,自从我上次发表评论以来的2.5年中,Task
已经对IProgress<T>
和进行了补充Progress<T>
,它们比BackgroundWorker
的过程更干净,更容易。在现代代码中,根本没有理由再使用BackgroundWorker
。