c#牛人进。。

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)这种方式进行循环验证。。如果只是一个方法执行下去。请问怎样取消掉该任务???
12345678_0001
浏览 354回答 2
2回答

Cats萌萌

研究了下貌似没什么好办法,提供两个参考 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 } 结果图:

BIG阳

while(flag){ // } 外部改变flag值为false后,循环就结束了。
打开App,查看更多内容
随时随地看视频慕课网APP