为了账号安全,请及时绑定邮箱和手机立即绑定

c#牛人进。。

c#牛人进。。

12345678_0001 2018-12-07 13:51:10
var source =new CancellationTokenSource();var token = source.Token;var task = Task.Factory.StartNew(() =>{    Console.WriteLine("Task starting...");    while (true)    {        token.ThrowIfCancellationRequested();        Console.WriteLine("I'm alive. {0}",DateTime.Now);        Thread.Sleep(1000);    }},token);在c#并行处理中。在实际项目中。不可能使用while(true)这种方式进行循环验证。。如果只是一个方法执行下去。请问怎样取消掉该任务???
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

研究了下貌似没什么好办法,提供两个参考 1、可能在耗时任务中“常常”if (curToken.IsCancellationRequested){}这样判断是个好习惯。 2、使用token.Regester()+Abort()终止线程,这个好像很偏,后遗症也不知道,代码如下 var source = new CancellationTokenSource(); var token = source.Token; var task = Task.Factory.StartNew((objToken) => { CancellationToken curToken = (CancellationToken)objToken; curToken.Register((objThread) => { Thread curThread = objThread as Thread; Console.WriteLine(String.Format("线程ID为{0},Task终止", curThread.ManagedThreadId)); curThread.Abort(); } , Thread.CurrentThread); Console.WriteLine("Task starting..."); while (true) { Console.WriteLine(String.Format("线程ID为{0},I'm alive. {1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now)); Thread.Sleep(1000); } }, token); Thread.Sleep(5000); try { source.Cancel(); } catch { // 使用curThread.Abort();这里捕获不到异常System.Threading.ThreadAbortException } 结果图:
查看完整回答
反对 回复 2018-12-09
?
BIG阳

TA贡献1859条经验 获得超6个赞

while(flag){ // } 外部改变flag值为false后,循环就结束了。
查看完整回答
反对 回复 2018-12-09
  • 2 回答
  • 0 关注
  • 339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信