net 多线程学习 21 CancellationTokenSource 取消 task


 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


作者:spike

分类: Net

创作时间:2023-06-25

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1