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 ...
随机推荐
- Linux 基础-文件及目录管理
本文大部分内容参看 <Linux基础>一书,根据自己的工程经验和理解加以修改.拓展和优化形成了本篇博客,不适合 Linux 纯小白,适合有一定基础的开发者阅读. 一,概述 在 Linux ...
- npm之基本使用
# 查看镜像源 npm config get registry # 设置镜像源 # 腾讯云 npm config set registry http://mirrors.cloud.tencent.c ...
- 打包jar 程序,同时将依赖报一起打包
1.概述 有些时候,我们打包一个java 程序,我需要将所有的依赖也一起打包,这样执行起来方便. 2.我们可以使用maven 插件实现 <build> <plugins> &l ...
- .NET Core 堆结构(Heap)底层原理浅谈
.Net托管堆布局 加载堆 主要是供CLR内部使用,作为承载程序的元数据. HighFrequencyHeap 存放CLR高频使用的内部数据,比如MethodTable,MethodDesc. 通过i ...
- RabbitMQ快速入门 整合 SpringBoot
RabbitMQ快速入门 整合 SpringBoot 概述 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力.流量削峰 消息服务中两个重要概念: 消息代理(`message broke ...
- cve-2021-3156-sudo堆溢出简单分析
调试方式 首先从github下载代码 https://github.com/sudo-project/sudo/archive/SUDO_1_9_5p1.tar.gz 编译 tar xf sudo-S ...
- vue3 重置reactive数据
有一个formData数据字段,使用class创建一份初始数据与其对应,使用Object.assign进行重置 import { reactive } from 'vue' class InitFor ...
- vue keep-alive include无效
1. 检查版本 include和exclude是vue2.1.0新增的两个属性 2. 检查需要缓存的每个组件中的name属性 router.js 中的name和vue组件的name保持一致,不要混乱 ...
- Vue2 面试题 (2023-09-22更新)
基础 Vue2.0 兼容 ie 哪个版本? 不支持 ie8,部分兼容 ie9,完全兼容 ie10 因为 vue 的响应式原理是基于 es5 的 Object.defineProperty 这个方法不支 ...
- DotNet Core Threadpool
DotNet Core Threadpool Jai Rathore https://medium.com/@jaiadityarathore/dotnet-core-threadpool-bef2f ...