System.Threading.Tasks.Task 引起的 IIS 应用池崩溃
接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误
最后直接程序池直接被禁用
查看管理事件
Application Error
错误模块名称: KERNELBASE.dll,版本:
6.1.7601.17514,时间戳: 0x4ce7bafa
异常代码: 0xe0434352
错误偏移量: 0x0000b727
错误进程 ID: 0xc1c
错误应用程序启动时间: 0x01d045ca298f9b3c
错误应用程序路径: C:\Windows\SysWOW64\inetsrv\w3wp.exe
错误模块路径: C:\Windows\syswow64\KERNELBASE.dll
报告 ID: eb60afd0
-b1bd-11e4-9f2d-005056a934bb
.NET Runtime
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AggregateException
Stack:
at System.Threading.Tasks.TaskExceptionHolder.Finalize()
初步排查代码确定有可能的几点
1.项目中使用了dapper ,使用了using,跟踪了源码发现已经有对连接池的处理
int flagNum = new SqlConnection(DBSetting.XXX).Execute("SPS_BookForApp", param, commandType: CommandType.StoredProcedure);
2.由之前的委托异步改为基于任务Task的异步
Func<string, string> func = f =>
{
if (!string.IsNullOrEmpty(orderNo) &&orderNo.IsPositiveInt())
{
//记录订单量
}
else
{
return string.Empty;
}
};
func.BeginInvoke("Logging Order Data", ir =>
{
var ar = (AsyncResult)ir;
var fun = (Func<string, string>)ar.AsyncDelegate;
string returnValue = fun.EndInvoke(ir);
if (!string.IsNullOrEmpty(returnValue))
{
//判断是否记录成功
}
}, null);
改为
Task.Factory.StartNew(() =>
{
//
})
没有去捕获异常,想起之前看过的dudu说过这样的问题 ,于是修改了下
var task = Task.Factory.StartNew(() =>
{
throw new MyCustomException("Task1 faulted.");
})
.ContinueWith((t) =>
{
Console.WriteLine("I have observed a {0}", t.Exception.InnerException.GetType().Name);
}, TaskContinuationOptions.OnlyOnFaulted);
现运行良好。
Refer:
Exception Handling (Task Parallel Library)https://msdn.microsoft.com/en-us/library/dd997415.aspx
http://www.cnblogs.com/dudu/archive/2012/04/05/task_unhandled_exception_application_crash.html
Exception Handling with the Task Parallel Library
http://www.ademiller.com/blogs/tech/2010/10/exception-handling-with-the-task-parallel-library/Exception while running system threading tasks task
http://stackoverflow.com/questions/15804059/exception-while-running-system-threading-tasks-task
System.Threading.Tasks.Task 引起的 IIS 应用池崩溃的更多相关文章
- System.Threading.Tasks.Task引起的IIS应用程序池崩溃
问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状态,Web服务器无响应. 2. 从服务器端看(Windows Server 2008 + IIS 7.0 ...
- System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃
转载:http://www.cnblogs.com/aaa6818162/p/4421305.html 问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状 ...
- Threading.Tasks.Task多线程 静态全局变量(字典) --只为了记录
--------------------------------------------------------------后台代码---------------------------------- ...
- .Net多线程编程—System.Threading.Tasks.Parallel
System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...
- HttpClient exception:ExceptionType:System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System.IO.IOException: Unable to read data from the transport connection: Operation ca
error msg: System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System. ...
- 转载 Net多线程编程—System.Threading.Tasks.Parallel
.Net多线程编程—System.Threading.Tasks.Parallel System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Paral ...
- 一、并行编程 - 数据并行 System.Threading.Tasks.Parallel 类
一.并行概念 1.并行编程 在.NET 4中的并行编程是依赖Task Parallel Library(后面简称为TPL) 实现的.在TPL中,最基本的执行单元是task(中文可以理解为"任 ...
- System.Threading.Tasks
前言: 我们之前介绍了两种构建多线程软件的编程技术(使用异步委托或通过System.Threading的成员).这两个可以在任何版本的.NET平台工作. 关于System.Threading 的介绍 ...
- .NET 4.0 System.Threading.Tasks学习笔记
由于工作上的需要,学习使用了System.Threading.Tasks的使用,特此笔记下来. System.Threading.Tasks的作用: Tasks命名空间下的类试图使用任务的概念来解决线 ...
随机推荐
- shell常用符号的意义
转自:http://blog.sina.com.cn/mo0928 感谢原作者!!! 跟網路農夫了解UNIX SHELL-(Bash scripting 简介 第四章 特殊符号) (2007-08-1 ...
- plsql Developer 登录oracle出现 initialization error
plsql Developer 登录oracle出现 initialization error 原因:plsql没有64位的,32位的plsql连接64位的oracle才会报错 解决方案:到oracl ...
- mybatis sql xml 字符逃脱
where a 不等于 1 where a <> 1 where a <![CDATA[<>]]> 1
- python爬虫之一:requests库
目录 安装requtests requests库的连接异常 HTTP协议 HTTP协议对资源的操作 requests库的7个主要方法 request方法 get方法 网络爬虫引发的问题 robots协 ...
- noip第9课资料
- 3D打印切片软件介绍
熟悉3D打印的流程的人都知道,在建立了3D模型以后要就进行切片,但是什么是切片呢?切片实际上就是讲3D模型转化为3D打印机本身可以执行的代码,G代码,M代码. 3D打印流程 今天我们简要的介绍3款切片 ...
- bzoj 2440 完全平方数 【莫比乌斯函数】
题目 题意:第Ki 个不是完全平方数的正整数倍的数. 对于一个数t,t以内的数里的非完全平方数倍数的个数:num=1的倍数的数量−一个质数平方数(9,25,49...)的倍数的数量+两个质数的积平方数 ...
- codeforces 475D
题意:给定n(n<=100000)个1e9以内的数的数组a,然后最多有3*1e5的询问,对于每个询问,给定一个x,问有多少个(l<=r&&gcd(a[l],a[l+1].. ...
- Nginx 实现端口转发
https://www.cnblogs.com/zhaoyingjie/p/7248678.html Nginx 实现端口转发 什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书 ...
- ?js调用PHP里的变量,怎么弄?
js调用PHP里的变量,怎么弄 网上给的例子都是js文件里一开始先给这个变量一个值,要是那样有啥意思啊,我要的就是可以变化的. hychyc_2008 | 浏览 2741 次 2013-04-18 ...