• task 如何终止线程


    前言

    这个直接上代码。

    代码逻辑是使用var tokenSource = new CancellationTokenSource();

    让tokenSource 去取消。值得注意的是取消线程后,线程会产生异常,可以在try catch 中查看,可以运行下面代码即可查看到一个完整的逻辑。

    正文

    static void Main(string[] args)
    {
    	Test_Delay();
    	Thread.Sleep(10000);
    }
    public static  void Test_Delay()
    {
    	var tokenSource = new CancellationTokenSource();
    	var token = tokenSource.Token;//创建终止标识
    	Task.Factory.StartNew(() => { Thread.Sleep(5000); tokenSource.Cancel(); //在等待期间被取消,那么此时将会出错,不要用abort,相当不好。
    								});
    	Console.WriteLine("taskDelay1");
    	Task taskDelay1 = Task.Delay(100000, token);
    	try
    	{
    		taskDelay1.Wait();//等待
    	}
    	catch (AggregateException ae)
    	{
    		foreach (var v in ae.InnerExceptions)
    			Console.WriteLine(ae.Message + " " + v.Message);
    	}
    	taskDelay1.ContinueWith((t) => Console.WriteLine(t.Status.ToString()));
    
    	Thread.Sleep(100);
    	Console.WriteLine();
    	Console.WriteLine("taskDelay2");
    	Task taskDelay2 = Task.Delay(5000);
    	taskDelay2.ContinueWith((t) => Console.WriteLine(t.Status.ToString()));
    }
    

    后续

    取消的原理后续补齐。

  • 相关阅读:
    二叉排序树
    安全的终止线程的两种方法
    图的广度优先遍历(BFS)
    图的深度优先遍历(DFS)
    volatile的应用
    二叉树的遍历
    Java-反射
    Java--泛型
    单例模式
    剑指Offer--对称二叉树
  • 原文地址:https://www.cnblogs.com/aoximin/p/13214140.html
Copyright © 2020-2023  润新知