下面是一个示例代码,它创建了一个模拟长时间运行的进程的新任务。没有什么太多的任务是纯粹关注取消功能的。我使用取消令牌来取消任务,并且代码正常工作为了我。将CancellationToken传递给Task类的构造函数有什么用?
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);
}
}
但onething是我无法理解的是,被传递到任务Constructor.What令牌参数(CTS.Token)是实际使用传递参数,当我其实可以取消任务即使没有将令牌传递给构造函数。
下面是一个略有修改的版本,没有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;
}
};
我会推荐阅读:http://blogs.msdn.com/b/pfxteam/archive/2009/05/22/9635790.aspx – Slugart