Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后台工作人员或任务,执行哪项?_C# - Fatal编程技术网

C# 后台工作人员或任务,执行哪项?

C# 后台工作人员或任务,执行哪项?,c#,C#,我是TPL的新手,我想知道什么时候使用BackgroundWorker,什么时候使用Task。两个人对我都一样。我应该把所有的后台工作人员都换成任务吗?任务是否表现得更好,或者任务代表了什么?Task.Run是否创建新线程?任务Ui是否更友好?BackgroundWorker已被任务取代,一般来说,如果可能,您应该使用后者 请注意,除了具有更多功能的任务外,还有一些细微的差异可能是相关的。例如,一个任务不一定要在不同的线程上运行,而BackgroundWorker.DoWork则必须在不同的线程

我是TPL的新手,我想知道什么时候使用BackgroundWorker,什么时候使用Task。两个人对我都一样。我应该把所有的后台工作人员都换成任务吗?任务是否表现得更好,或者任务代表了什么?Task.Run是否创建新线程?任务Ui是否更友好?

BackgroundWorker已被任务取代,一般来说,如果可能,您应该使用后者

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

可以说,BackgroundWorker更易于使用,而且在4之前的.NET版本中开发时仍然需要它


我不建议重构您现有的代码,只要开始在新的基础中使用任务即可。我还发现任务更容易与UI集成,但这可能是主观的。

BGW更容易实现,任务现在使它们过时了。但是没有理由替换现有代码中的任何内容。这是一个很大的问题。对这些广泛问题的真正答案也同样广泛。也就是说,正如亨克所说,我认为BackgroundWorker现在已经过时了。将异步工作分解为使用async/await并仍然提供进度报告可能会很棘手,但我认为这是值得的,因为这样可以更易于阅读代码。注意,净效应实际上是相同的;i、 当使用async/await作为BW替换时,您会得到相同的结果:后台工作在不同的线程中运行,UI工作在UI线程中执行。这是两者的重点。@PeterDuniho在我看来,IProgress和Progress并没有从微软获得足够的曝光率。他们可以使进度报告变得非常简单,但是重构总是非常大的。任务Ui友好吗?他们创建自己的线程吗?