zoukankan      html  css  js  c++  java
  • 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()));
    }
    

    后续

    取消的原理后续补齐。

  • 相关阅读:
    【转载】Spring各jar包详解
    Docker attach卡着的解决
    三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别
    决策表
    因果图与决策表法
    边界值分析法
    黑盒测试方法
    软件测试的基本流程
    软件测试原则
    软件测试与软件开发
  • 原文地址:https://www.cnblogs.com/aoximin/p/13214140.html
Copyright © 2011-2022 走看看