C# 什么是C/NET4.0+;实现可取消后台线程的方法?

C# 什么是C/NET4.0+;实现可取消后台线程的方法?,c#,.net,multithreading,.net-4.0,C#,.net,Multithreading,.net 4.0,在.NET4.0之前,我的理解是,如果一个人想启动一个线程来完成一些可能被取消的工作,他会启动一个BackgroundWorker。NET4带来了TAP模型,以及一大堆新的异步和线程技术。BackgroundWorker仍然是这样做的吗?请注意,async(以及相应的关键字await)都是.NET 4.5,在4.0中不可用。如果您想使用任务s,我强烈建议您升级到.NET 4.5。然而,即使在4.0中,也有一些重载方法可以选择使用s来取消正在运行的工作 编辑:正如评论中指出的那样,在.NET 4.

在.NET4.0之前,我的理解是,如果一个人想启动一个线程来完成一些可能被取消的工作,他会启动一个
BackgroundWorker
。NET4带来了TAP模型,以及一大堆新的异步和线程技术。
BackgroundWorker
仍然是这样做的吗?

请注意,
async
(以及相应的关键字
await
)都是.NET 4.5,在4.0中不可用。如果您想使用
任务
s,我强烈建议您升级到.NET 4.5。然而,即使在4.0中,也有一些重载方法可以选择使用s来取消正在运行的工作

编辑:正如评论中指出的那样,在.NET 4.0上可以获得
async
/
wait
——在4.5中您只需要更少的工作和更多的库支持。如果不迫切需要XP支持的话,我不会推荐这种东西

从.NET4.5开始,该类没有标记为,因此没有理由不继续直接使用它


包含一个直接的
.Abort()
方法,可用于创建可取消的工作进程。请注意,此中止是通过在正在运行的线程中抛出
ThreadAbortException
来实现的,因此允许
catch
语句在线程中止的情况下仍然执行任何清理。

在现代代码中,我建议使用
任务。使用
取消令牌运行
。相比之下,
BackgroundWorker
取消风格相当复杂:它要求
DoWork
委托监视自己的
BackgroundWorker
实例,并将取消请求视为布尔值而不是异常


我有一个更详细的例子。

BackgroundWorker
是在后台工作的一种方法;这当然不是唯一的办法。第三方物流也是如此;这是一种做很多事情的方法(包括在后台线程中开始可取消的工作),但这并不是做这些事情的唯一方法。如果它们对您有用,很好,请使用它们,如果没有,请继续使用其他工具来解决您的问题。嘿,感谢您用
任务
异步
/
等待
消除了4.0与4.5之间的差异!我确实在使用4.5--我从3.5升级了我的项目。从技术上讲,您可以在4.0项目中使用
async
/
wait
,只要您使用的是VS2013或更高版本,并且添加了NuGet软件包。但是,您确实需要安装一些4.0修补程序,因此,除非您需要XP支持,否则4.5是一个更好的选择。谢谢!在阅读了您在MSDN上写的一篇文章之后,我最终选择了这种方法!