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

    后续

    取消的原理后续补齐。

  • 相关阅读:
    存储引擎-Buffered tree
    存储引擎-Bitcast
    飞锐GIS开发基础系列
    arcgisserver
    综​合​管​网​方​案​说​明
    Leaflet交流
    .NET开源工程推荐(Accord,AForge,Emgu CV)
    GIS科研站
    C语言I博客作业008
    预习原码补码
  • 原文地址:https://www.cnblogs.com/aoximin/p/13214140.html
Copyright © 2011-2022 走看看