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,查看更多内容