1
我是TPL新手,想知道何时使用BackgroundWorker以及何时使用Task。两者对我都一样。我应该把所有的背景工作者都改为任务吗?无论如何,任务表现更好还是什么是所有这些任务? Task.Run是否创建一个新的线程?任务是否友好?BackgroundWorker或Task,要实现?
我是TPL新手,想知道何时使用BackgroundWorker以及何时使用Task。两者对我都一样。我应该把所有的背景工作者都改为任务吗?无论如何,任务表现更好还是什么是所有这些任务? Task.Run是否创建一个新的线程?任务是否友好?BackgroundWorker或Task,要实现?
BackgroundWorker
已被Tasks
取代,一般情况下,应尽可能使用后者。
请注意,除了具有更多功能的任务之外,还有可能相关的细微差异。例如,Task
可能不一定在不同的线程上运行,而BackgroundWorker.DoWork
则可以。
可以说,BackgroundWorker
更易于使用,并在.NET之前版本4.
开发时,你仍然需要它,我不会建议重构现有的代码,刚开始在新基地使用的任务。我也发现任务更容易与UI集成,但这可能是主观的。
BGW稍微容易实现,任务现在使它们过时。但是没有理由取代现有代码中的任何东西。 – 2014-12-03 08:03:16
这是很多问题。对这些广泛问题的真正答案也同样广泛。也就是说,正如Henk所说,我认为'BackgroundWorker'现在已经过时了。将异步工作分解为使用'async' /'await'并仍然提供进度报告可能会非常棘手,但是恕我直言,这对于易于阅读的代码来说是值得的。请注意,净效果真的是一样的;即当使用'async' /'await'作为BW替换时,你可以得到相同的结果:背景的东西在不同的线程中运行,UI的东西在UI线程中被执行。这是两者的关键。 – 2014-12-03 08:09:00
@PeterDuniho imo,'IProgress'和'Progress '没有从微软获得足够的曝光率。他们可以使进展报告非常简单,但重构总是很大。 –
Gusdor
2014-12-03 08:21:39