Task异常处理的坑
全局异常
TaskScheduler.UnobservedTaskException += (e, args) =>{
MessageBox.Show("dddddddddddddddd");
};
即便有个Task发生了未处理的异常,也不会立即触发这个事件,而是那个Task必须被GC回收时才会触发,如果那儿task一直被引用,那么它一直无法触发
所以我们可以手动调用GC.Collect();,但这样也不一定行
经过测试,.net 4.0中程序必须是release模式才有效,而.net 4.5 debug或release都行
完整测试代码如下:
TaskScheduler.UnobservedTaskException += (eeee, args) =>
{
MessageBox.Show("sssssssssssss");
}; Task.Run(() => {
throw new Exception("aa");
}); Thread.Sleep(2000);
GC.Collect();
发生未处理异常时阻止程序退出
vs2019 .net 4.0中、4.5测试发生未处理task异常时 并不会像未处理线程异常那样程序退出,可以在配置中做如下配置:
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
这样发生未处理的task异常后 程序会退出。
无论如何,TaskScheduler.UnobservedTaskException事件还是会触发,但是前提条件上面已经讲过了
剩下的task异常处理看官网文档就行了
Task异常处理的坑的更多相关文章
- Task异常处理
http://www.cnblogs.com/xray2005/archive/2011/08/24/2151459.html
- 细说.NET中的多线程 (三 使用Task)
上一节我们介绍了线程池相关的概念以及用法.我们可以发现ThreadPool. QueueUserWorkItem是一种起了线程之后就不管了的做法.但是实际应用过程,我们往往会有更多的需求,比如如果更简 ...
- C#并行编程-Task
菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...
- 异步多线程 Task理解
一.简介 Task是.NET Framework4.0 TPL(任务并行库)提供的新的操作线程池线程的封装类.它提供等待.终止(取消).返回值.完成通知.失败通知.控制执行的先后次序等优化线程操作功能 ...
- Task构造
//原文:http://www.tuicool.com/articles/IveiQbQ 创建并且初始化Task 使用lambda表达式创建Task Task.Factory.StartNew(() ...
- async/await使用深入详解
async和await作为异步模型代码编写的语法糖已经提供了一段时间不过一直没怎么用,由于最近需要在BeetleX webapi中集成对Task方法的支持,所以对async和await有了深入的了解和 ...
- [转][C#]手写 Socket 服务端
private void OpenSocket(int port) { Task.Factory.StartNew(() => { server = new Socket(AddressFami ...
- 《Asp.Net Core3 + Vue3入坑教程》 - 6.异常处理与UserFriendlyException
简介 <Asp.Net Core3 + Vue3入坑教程> 此教程适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 目录 & ...
- Task中的异常处理
最简单的方式 var t = new Task(() => { throw new Exception("unknow excption"); }); t.Start(); ...
- gulp入坑系列(3)——创建多个gulp.task
继续gulp的爬坑路,在准备get更多gulp的具体操作之前,先来明确一下在gulp中创建和使用多个task任务的情况. gulp所要做的操作都写在gulp.task()中,系统有一个默认的defau ...
随机推荐
- 基于sqli-labs Less-5 sql报错注入详解
按照之前的思路发现,是正常的'闭合的字符型,但是在联合注入0' union select 1,2,3--+没有回显注入点,只是回显You are in,因此无法使用联合注入,考虑使用报错注入或者盲注. ...
- 拯救php性能的神器webman-数据库
有了webman的这个框架,我们得看看它是怎么使用数据库的,毕竟我们不能一直用内存变量啊. 好,很简单一句话跑起来. composer require -W illuminate/database i ...
- php子孙树生成层级-递归篇
毫不废话,代码如下: <?php $list = [ ['id' => 1, 'pid' => 0, 'name' => '江苏'], ['id' => 2, 'pid' ...
- k8s-部署应用
Deployment # app-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: app-web spec: ...
- C# 学习笔记 0415
关于零碎的知识笔记总结,你可能需要知道的 一.Linq相关 Find()和First()与FirstOrDefault Find方法只能在List上使用,而后者能更广泛应用在IEnemerable上. ...
- Qt 在线程中invokeMethod采用QueuedConnection模式,调用带指针参数槽,实际不会调用
widgetObject有操函数Test: void Test(int *v); 在线程中调用Test,会被忽略,实际不会调用. QMetaObject::invokeMethod(widgetObj ...
- Python开发一个Instant Messaging(IM)(即时通讯)聊天工具:从理论到实践
一.引言 在现代社会中,即时通讯工具已经成为人们日常沟通的重要工具.开发一个IM聊天工具不仅能够提高我们的编程技能,还能让我们更好地理解即时通讯系统的原理.本文将详细介绍如何开发一个简单的IM聊天工具 ...
- 痞子衡嵌入式:MCUXpresso IDE下C++源文件中嵌套定义的复合数据类型命名空间认定
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下C++源文件中嵌套定义的复合数据类型命名空间认定. 痞子衡之前写过一篇文章 <MCUXpresso ...
- 知乎 微软当年的 J++ 究竟是什么?为什么 Sun 要告它? zz
https://www.zhihu.com/question/22814456 考个古
- JWT相关知识点
目录 一.jwt介绍和原理 概念 构成与工作原理 1.header 2.payload 3.signature 本质原理 jwt认证算法:签发与校验 签发:根据登录请求提交来的 账号 + 密码 + 设 ...