多线程的异常处理、线程取消、临时变量、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 多线程之线程取消
//线程取消不是操作线程,而是操作信号量(共享变量,多个线程都能访问到的东西,变量/数据库的数据/硬盘数据) //每个线程在执行的过程中,经常去查看下这个信号量,然后自己结束自己 //线程不能别人终止 ...
随机推荐
- ReactiveX 学习笔记(16)RxPY
RxPY RxPY 是 ReactiveX 的 Python语言实现. # 安装 RxPY $ pip3 install rx Successfully installed rx-1.6.1 Basi ...
- Haskell语言学习笔记(72)Free Monad
安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...
- 转:HTML5页面如何在手机端浏览器调用相机、相册功能
HTML5页面如何在手机端浏览器调用相机.相册功能 开发微信端浏览器访问的HTML5的页面,页面中有一个<input id="input" type="file&q ...
- Android Studio3.1.2编译时Java Compiler出错:Warning: Failed to parse host proxy3.bj...
删除gradle.properties中的代理设置... #移除下面配置systemProp.http.proxyHost=proxy3.bj.petrochina systemProp.http.p ...
- Delphi Class of 类引用
Delphi Class of 类引用也就是类的类型,也可说是指向类的指针 Type TControlCls = Class of TControl;function CreateComponent( ...
- redmine安装-BitNami 提供的一键安装程序
redmine安装-BitNami 提供的一键安装程序 博客分类: REDMINE redmine安装redmine一键安装bitNami redmine BitNami 提供re ...
- FMS Dev Guide学习笔记(验证客户端)
一.开发交互式的媒体应用程序 1.使用客户端对象的属性 当一个客户端连接上服务器上的一个应用,服务端就会创建一个包含这个客户端信息的客户端对象并且将它传递给application.onConn ...
- Oracle ORA-00911: 无效字符
SQL语句后多了个分号 “ ; ”.
- JQuery/JS插件 zTree树,点击当前节点展开,其他节点关闭
好像没找到现成的,就自己写了一个demo. 效果如下: 代码: <!DOCTYPE html> <html> <head> <meta http-equiv= ...
- 当try-catch-finally代码块遇上return,代码执行流程是怎样
这里打算用一个Java读取文件内容的例子来测试,文件存在,不抛异常,文件不存在,则抛出FileNotFoundException: Java读取文件代码如下: /** * 根据路径和文件名获取内容 * ...