多线程的异常处理、线程取消、临时变量、lock
异步多线程的异常,抓不到,因为是在子线程执行。
#region 多线程的异常处理、线程取消、临时变量、lock
{
try
{
List<Task> list = new List<Task>();
TaskFactory taskFactory = new TaskFactory();
//取消线程
CancellationTokenSource cts = new CancellationTokenSource();
for (int i = ; i < ; i++)
{
string name = "task" + i;
//无参数,无返回值的一个委托
Action act = new Action(() =>
{
try
{
if (name == "task4")
{
throw new Exception("抛出异常信息");
}
Thread.Sleep();
//检查Task是否被取消了
if (cts.IsCancellationRequested)
{
Console.WriteLine(name + " 被取消:" + cts.IsCancellationRequested);
}
else
{
Console.WriteLine(name + " 执行成功");
}
}
catch (Exception ex)
{
cts.Cancel();//取消,所有子线程都会被取消
Console.WriteLine("子线程异常:{0}", ex.Message);
}
}); Task task = taskFactory.StartNew(act, cts.Token);
list.Add(task);
//cts.Token是一个标识,用来标记线程是否已经被取消了
//输出结果
//子线程异常:抛出异常信息
//task2 被取消:True
//task1 被取消:True
//task3 被取消:True
//task0 被取消:True
}
Task.WaitAll(list.ToArray());
}
catch (AggregateException ex)
{
foreach (var item in ex.InnerExceptions)
{
Console.WriteLine(item.Message);
}
} }
#endregion #region 多线程延迟问题
{
Action<int> act = new Action<int>(t =>
{
Thread.Sleep();
Console.WriteLine(t);
});
for (int i = ; i < ; i++)
{
//Task.Run 需要接受 无参数、无返回值 的Action,所以需要包装一下
//会出现错误,输出的全部是 10,因为Task.Run去申请线程后并没有立即执行,当执行的时候for循环已经结束,i已经变成10了
//Task.Run(() => act(i)); //解决方法,每次循环都会创建一个新的变量k,执行的时候引用的是当时的k
int k = i;
Task.Run(() => act(k));
}
}
#endregion
多线程的异常处理、线程取消、临时变量、lock的更多相关文章
- C# 多线程总结 异常处理 线程取消 锁(lock)
那么什么时候能用多线程? 任务能并发的时候 多线程能干嘛?提升速度/优化用户体验 网站首页:A数据库 B接口 C分布式服务 D搜索引擎,适合多线程并发,都完成后才能返回给用户,需要等待WaitAll列 ...
- 20181106_线程之异常_取消_变量_安全Lock
一. 线程的异常处理: try { TaskFactory taskFactory = new TaskFactory(); List<Task> taskList = new List& ...
- .NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...
- .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...
- Java多线程:线程间通信之Lock
Java 5 之后,Java在内置关键字sychronized的基础上又增加了一个新的处理锁的方式,Lock类. 由于在Java线程间通信:volatile与sychronized中,我们已经详细的了 ...
- 线程系列07,使用lock语句块或Interlocked类型方法保证自增变量的数据同步
假设多个线程共享一个静态变量,如果让每个线程都执行相同的方法每次让静态变量自增1,这样的做法线程安全吗?能保证自增变量数据同步吗?本篇体验使用lock语句块和Interlocked类型方法保证自增变量 ...
- posix多线程--线程取消
1.三种取消状态Off 禁用取消Deferred 推迟取消:在下一个取消点执行取消Asynchronous 异步取消:可以随时执行取消 in ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- .net 多线程之线程取消
//线程取消不是操作线程,而是操作信号量(共享变量,多个线程都能访问到的东西,变量/数据库的数据/硬盘数据) //每个线程在执行的过程中,经常去查看下这个信号量,然后自己结束自己 //线程不能别人终止 ...
随机推荐
- vue项目遇到的坑
一.启动项目问题 1. 如何从git上拉下项目:点我 2. 启动项目失败: 点我 and 点我 二.搭建项目问题 1. 先改分辨率,否则可能影响布局 以我的项目为例,分辨率修改位置如下: 2. .v ...
- SQLServer 的数据分页:
假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar(20))然后向里面插入大约1000 ...
- curl命令解析
curl命令可以实现http post或者get的请求,是linux下的命令行工具 1.1.直接请求url,打印标准输出 1.2.使用-o参数,可以标准输出到指定的位置 [root@VM-3-10-1 ...
- web前端面试题HTML/CSS部分
web前端面试题HTML/CSS部分 前端页面有哪三层构成,分别是什么?作用是什么? 1.结构层:由 HTML 或 XHTML 之类的标记语言负责创建,仅负责语义的表达.解决了页面“内容是什么”的问题 ...
- swift 头尾式动画
1.0 头尾式动画 UIView.beginAnimations(nil, context: nil) UIView.setAnimationDuration(1.0) // 设置执行动画所需要的时间 ...
- scala spark 聚类
import org.apache.spark.ml.clustering.KMeansimport org.apache.spark.ml.evaluation.ClusteringEvaluato ...
- python模拟线性回归的点
构造符合线性回归的数据点 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt # 随机生成1000个点 ...
- python基础学习Day8 文件的基本操作
1.文件的基本操作初识 f = open('a.text', 'r', encoding='utf-8')data = f.read()print(data)f.close() 2.读 r r+b ...
- java NIO 文章
http://tutorials.jenkov.com/java-nio/ 总结nio nio是非阻塞的,一个线程可以管多个Channel,每个channel可以处理bytebuffer 而no是阻塞 ...
- java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1) for method ApiService.getMethod
@FormUrlEncoded @POST("getMethod") Observable<Bean> getMethod(String field); 今天在写Ret ...