2014-12-03 69 views
1

我是TPL新手,想知道何时使用BackgroundWorker以及何时使用Task。两者对我都一样。我应该把所有的背景工作者都改为任务吗?无论如何,任务表现更好还是什么是所有这些任务? Task.Run是否创建一个新的线程?任务是否友好?BackgroundWorker或Task,要实现?

+1

BGW稍微容易实现,任务现在使它们过时。但是没有理由取代现有代码中的任何东西。 – 2014-12-03 08:03:16

+1

这是很多问题。对这些广泛问题的真正答案也同样广泛。也就是说,正如Henk所说,我认为'BackgroundWorker'现在已经过时了。将异步工作分解为使用'async' /'await'并仍然提供进度报告可能会非常棘手,但是恕我直言,这对于易于阅读的代码来说是值得的。请注意,净效果真的是一样的;即当使用'async' /'await'作为BW替换时,你可以得到相同的结果:背景的东西在不同的线程中运行,UI的东西在UI线程中被执行。这是两者的关键。 – 2014-12-03 08:09:00

+0

@PeterDuniho imo,'IProgress '和'Progress '没有从微软获得足够的曝光率。他们可以使进展报告非常简单,但重构总是很大。 – Gusdor 2014-12-03 08:21:39

回答

0

BackgroundWorker已被Tasks取代,一般情况下,应尽可能使用后者。

请注意,除了具有更多功能的任务之外,还有可能相关的细微差异。例如,Task可能不一定在不同的线程上运行,而BackgroundWorker.DoWork则可以。

可以说,BackgroundWorker更易于使用,并在.NET之前版本4.

开发时,你仍然需要它,我不会建议重构现有的代码,刚开始在新基地使用的任务。我也发现任务更容易与UI集成,但这可能是主观的。