在基於Task的任務執行過程中,我們通常使用CancellationTokenSource來實現任務取消,首先看一個簡單的例子。
var cancelTokenSource = new CancellationTokenSource();
Task.Factory.StartNew(() =>
{
while (!cancelTokenSource.IsCancellationRequested)
{
Console.WriteLine(DateTime.Now);
Thread.Sleep(1000);
}
}, cancelTokenSource.Token);
Console.WriteLine("Press any key to cancel");
Console.ReadLine();
cancelTokenSource.Cancel();
Console.WriteLine("Done");
Console.ReadLine();
很多時候,除了像上例中的那樣手動取消外,我們往往也要對任務設置一個預期執行時間,對超時的任務自動取消。之前一般做法是新啟動一個計時器,在計時器的超時回調中執行CancellationTokenSource.Cancel方法。在.Net 4.5中,該操作得到了進一步的簡化,我們可以通過在創建CancellationTokenSource時設置超時來實現這一功能。
var cancelTokenSource = new CancellationTokenSource(3000);
除此之外,也可以通過如下代碼實現同樣的效果。
cancelTokenSource.CancelAfter(3000);