下面是一個示例代碼,它創建了一個模擬長時間運行的進程的新任務。沒有什麼太多的任務是純粹關注取消功能的。我使用取消令牌來取消任務,並且代碼正常工作爲了我。將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