作为 初学者,一直使用thread,当线程进入thread.sleep时,如果发生紧急状况,经常使用abort,join指令直接将thread杀死,现在开始学习task,发现在task中使用 CancellationTokenSource 对象,使用while不停检测 iscancelationrequested状态,从而取消线程
我的应用场景是简单的工业控制,线程的创建已封装,调用时直接指定方法,方法体有的是while循环,直到软件推出才消亡,while不停执行switch语句,通过switch顺序执行逻辑动作;有的是无循环的顺序执行,自己执行完一遍就消亡了,考虑到如果要时刻检测iscancelationrequested状态,就需要在我封装的方法内部,为每一个task都内置一个cancellation对象,并将task对应的方法放入到while循环中,但是这样的话,有些方法是顺序执行一遍就消亡 的,为了检测iscancelationrequested状态嵌入到while循环中又不合适,无法达到马上杀死线程的效果,
作为初学者,说了这么多,不知道表述的想法大神们能否给出思路,整体就是希望在task上,能立马终止线程,
如果有相关的好的文章,也请大神们指点,谢谢
有些方法是顺序执行一遍就消亡
如果已经执行完了,就不存在取消 task 的问题
下面的代码就是取消 task
var ts = new CancellationTokenSource();
ts.Cancel();
@dudu: 大神,如果我新建一个thread,直接abort和join配合杀死指定的执行线程,指定的执行线程会直接消亡,但是使用CancellationTokenSource,终究是while循环判断其状态,while的循环周期,也制约停止的时序,希望在task中实现kill thread的方式,请大神再指点指点
@rossi1984: 参考 Background task with instant abort capability in c#