【发布时间】:2012-06-06 14:07:56
【问题描述】:
这是一个示例代码,它创建了一个模拟长时间运行的进程的新任务。任务本身并没有太多内容,只关注取消功能。我正在使用取消令牌来取消任务,代码对我来说很好。
CancellationTokenSource CTS = new CancellationTokenSource();
Task<Boolean> PTask = new Task<Boolean>(() =>
{
while (true)
{
if (!CTS.Token.IsCancellationRequested)
{
Thread.Sleep(5000);
}
else { Console.WriteLine("Thread Cancelled");break; }
}
return true;
}, CTS.Token, TaskCreationOptions.None);
PTask.Start();
Console.WriteLine("Hit Enter to cancel the Secondary thread you have started");
Console.ReadLine();
CTS.Cancel();
System.Console.WriteLine(PTask.Result);
但我无法理解的一件事是传递给Task 构造函数的令牌参数(CTS.Token)。传递参数的实际用途是什么,即使没有将令牌传递给构造函数,我实际上也可以取消任务。
下面是一个稍加修改的版本,无需令牌参数即可工作。
CancellationTokenSource CTS = new CancellationTokenSource();
Task<Boolean> PTask = new Task<Boolean>(() =>
{
while (true)
{
if (!CTS.Token.IsCancellationRequested)
{
Thread.Sleep(5000);
}
else
{
Console.WriteLine("Thread Cancelled");
break;
}
};
【问题讨论】:
-
这能回答你的问题吗? Cancellation token in Task constructor: why?
标签: c# .net multithreading cancellation-token