任务并行库中是否有任何可替代或改进BackgroundWorker类的内容?
我有一个带向导式UI的WinForms应用程序,它执行一些长时间运行的任务。我想要一个可以响应的UI,具有标准进度条和取消操作的能力。我以前使用过BackgroundWorker来实现这一点,但我想知道是否有一些可以使用TPL模式代替的方式?
任务并行库中是否有任何可替代或改进BackgroundWorker类的内容?
我有一个带向导式UI的WinForms应用程序,它执行一些长时间运行的任务。我想要一个可以响应的UI,具有标准进度条和取消操作的能力。我以前使用过BackgroundWorker来实现这一点,但我想知道是否有一些可以使用TPL模式代替的方式?
Task
类是对BackgroundWorker
的改进;它自然支持嵌套(父/子任务),使用新的取消API,任务继续等。 我的博客中有一个示例,展示了旧的BackgroundWorker
的做法和新的Task
的做法。我为需要报告进度的任务编写了一个小助手类,因为我发现语法相当笨拙。该示例涵盖了结果值、错误条件、取消和进度报告。请保留原有的html标签格式。BackgroundWorker
具有更容易的进度报告,而Task
允许嵌套。在这两者之间,我更喜欢Task
(清理进度报告比允许嵌套要容易得多)。虽然它们都比其他常见解决方案先进得多。但是当我听到人们使用Thread
或ThreadPool.QueueUserWorkItem
时,我感到非常不安,因为它们是最难正确使用的后台任务。 - Stephen Cleary后台工作者仍然是实现此目的的有效方法 - 如果您正在同时运行多个大型操作,则值得考虑并行扩展,如果只有一个操作,则建议使用后台工作者。