Luk*_*kas 3 .net c# multithreading
所以我的问题是如何以最佳和最优雅的方式在应用程序中的所有(我的意思是ALL)线程工作者中实现取消/中断功能?
如果是HttpWebRequest,IO操作或计算,这并不重要.用户应该有可能随时取消每个操作/线程.
用户应该有可能随时取消每个操作/线程.
线程是一种实践,而不是一种设计......并且相信我已经尝试过它作为一种设计,但却失败了.在任何时候简单地取消任何动作的基本问题是在多线程环境中它只是邪恶的!想象一下,您有一段由锁保护的代码,并且您有两个并行运行的线程:
这是最简单的示例,从技术上讲,我们可以在设计中处理这种情况,即自动释放线程已获取的任何锁,但不是锁,而是考虑对象状态,资源利用率,客户端依赖性等.如果您的线程是修改一个大对象并在修改过程中被取消,然后对象的状态可能不一致,你正在使用的资源可能会被挂起,客户端依赖于该线程可能会崩溃...有一个一大堆可能发生的事情,根本没有办法为它们设计.在这种情况下,你让一个做法来管理线程:你确保你的线程安全的取消.
其他人已经提到了启动可以取消的线程的各种方法,但我只想谈谈原则.即使在有取消线程的方法的情况下,您仍然需要记住,您有责任确定取消线程的最安全方法.
如果是HttpWebRequest,IO操作或计算,这并不重要.
我希望你现在明白为什么这是最重要的事情!除非你明确知道你的线程在做什么,否则没有安全的方法来自动取消它.
PS
有一点要记住的是,如果你不想挂线程然后他们中的每一个可以设置Thread.IsBackground标志true,他们将自动关闭,当您的应用程序退出.