zoukankan      html  css  js  c++  java
  • 任务的取消

       //当其中一个线程异常之后 之后的线程都取消
    多线程里面抛出的异常只会终结当前线程,不会影响其他线程
    try { List<Task> list2 = new List<Task>(); CancellationTokenSource cts = new CancellationTokenSource(); for (int i = 0; i < 50; i++) { string name = i + "线程"; list2.Add(Task.Run(() => { try { if (!cts.IsCancellationRequested) Console.WriteLine(name + "开始"); Thread.Sleep(new Random().Next(50, 100)); if (name == "11线程" || name == "12线程") { cts.Cancel(); throw new Exception(name + "异常"); } if (!cts.IsCancellationRequested) Console.WriteLine(name + "结束"); else Console.WriteLine(name + "被取消"); } catch (Exception ex) { Console.WriteLine(ex.Message); cts.Cancel(); } }, cts.Token)); // cts.Token的作用:在cts.Cancel() 之后会抛出异常,即将cts.Cancel()之后的任务取消 cts.Cancel() 时还没有启动的任务就不启动了 } Task.WaitAll(list2.ToArray());//1:捕捉到异常的线程 } catch (AggregateException ex)//2 通过try catch AggregateException 遍历 { foreach (var item in ex.InnerExceptions) { Console.WriteLine(item.Message); } } catch (Exception ex) { }
  • 相关阅读:
    Linux下安装漏洞扫描工具Nessus
    【译】使用OpenVAS 9进行漏洞扫描
    MD5小彩虹表
    获取某个版本软件存在的漏洞信息
    【译】使用chage来管理Linux密码过期时间的七个例子
    [转]Centos 安装Sublime text 3
    Nessus扫描策略
    Nginx使用笔记
    SSH 公钥登录
    MySQL加密
  • 原文地址:https://www.cnblogs.com/fanlin92/p/13605160.html
Copyright © 2011-2022 走看看