我使用此代码来同步运行任务
var result = new StringBuilder();
//cts is a CancellationTokenSource();
foreach (var test in Tests)
{
var t1 = new Task<string>(t => test.Run(), cts.Token);
t1.Strat();
result.Append(t1.Result);
}我从另一个线程调用cts.Cancel(),可以看到令牌已更新:cts.Token.IsCancellationRequested == true,但任务仍在运行,甚至下一个任务也会启动……
我遗漏了什么?
谢谢!
发布于 2014-06-12 00:06:17
来自CancellationToken.IsCancellationRequested的文档
如果此属性为true,则它只保证已被请求取消。It 不能保证每个注册的处理程序都完成了的执行,也不能保证取消请求已经完成传播到所有注册的处理程序。可能需要额外的同步,特别是在同时取消相关对象的情况下。
https://stackoverflow.com/questions/24167526
复制相似问题