CancellationTokenSource source = new CancellationTokenSource();
source.Token.Register(() =>
{
//如果当前的token被取消,此函数将会被执行
Console.WriteLine("当前source已经被取消,现在可以做资源清理了。。。。");
});
source.Cancel();
Task task1 = new Task(() =>
{
Thread.Sleep(1000);
Console.WriteLine("task1 tid={0}, dt={1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now);
});
var task2 = task1.ContinueWith(t =>
{
Console.WriteLine("task2 tid={0}, dt={1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now);
}, source.Token, TaskContinuationOptions.LazyCancellation, TaskScheduler.Current);
var task3 = task2.ContinueWith(t =>
{
Console.WriteLine("task3 tid={0}, dt={1} {2}", Thread.CurrentThread.ManagedThreadId,
DateTime.Now, task2.Status);
});
task1.Start();
Console.Read();
TaskContinuationOptions.ExecuteSynchronously
TaskContinuationOptions.NotOnRanToCompletion