异步多线程的异常,抓不到,因为是在子线程执行。

#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

最新文章

  1. MVC CodeFirst简单的创建数据库(非常详细的步骤)
  2. thinkphp系统常量与自定义常量
  3. c#图片输出
  4. Swift Internal Parameter and External Parameter 外部参数和内部参数
  5. mysql max_allowed_packet自动重置为1024 终结解决
  6. GUI图形界面
  7. HW5.36
  8. EventBus使用小记
  9. 【转】【已解决】Android中ActionBar中不显示overflow(就是三个点的那个按钮)--不错
  10. Go语言的构建方法总结
  11. windows 下一个mysql password忘记改变
  12. MongoDB学习总结(五) —— 安全认证
  13. Github 开源:升讯威 Winform 开源控件库( Sheng.Winform.Controls)
  14. SUSE-11 本地 zypper 配置
  15. js 个人笔记
  16. MySQL8.0关于caching_sha2_password Plugin的一个Bug
  17. spring cloud 实践之hystrix注意事项
  18. The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
  19. flex与滚动冲突
  20. snabbdom vdom 框架

热门文章

  1. Redis进阶实践之七Redis和Lua初步整合使用(转载 7)
  2. SQL 语句 写法
  3. [Sphinx]全文索引Sphinx的使用配置
  4. [Nginx]实战Nginx:Nginx的一些介绍
  5. (转)Python新手写出漂亮的爬虫代码2——从json获取信息
  6. 三,APIView、GenericAPIView、Mixins总结
  7. scala 下载
  8. mysql 连表查询
  9. Python基础之Python的变量、常量
  10. modal template