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()));
    }
    

    后续

    取消的原理后续补齐。

  • 相关阅读:
    mysql存储过程
    命令简写 ~/.bash_aliases
    TestCafe 快速上手 (三)
    TestCafe 快速上手 (二)
    OWASP 文档
    读书笔记
    读书笔记
    类数组转化为真正的数组
    Vue子组件向父组件传递数据
    node.js取参四种方法req.body,req.params,req.param,req.body
  • 原文地址:https://www.cnblogs.com/aoximin/p/13214140.html
Copyright © 2011-2022 走看看