接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误

为应用程序池“PokeIn”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“”。数据字段包含错误号。

最后直接程序池直接被禁用

应用程序池“PokeIn”将被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误。

查看管理事件

Application Error

错误应用程序名称: w3wp.exe,版本: 7.5.7601.17514,时间戳: 0x4ce7a5f8

错误模块名称: 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

Application: w3wp.exe Framework Version: v4.0.30319

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

http://stackoverflow.com/questions/7883052/a-tasks-exceptions-were-not-observed-either-by-waiting-on-the-task-or-accessi/7883083

System.Threading.Tasks.Task 引起的 IIS 应用池崩溃的更多相关文章

  1. System.Threading.Tasks.Task引起的IIS应用程序池崩溃

    问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状态,Web服务器无响应. 2. 从服务器端看(Windows Server 2008 + IIS 7.0 ...

  2. System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃

    转载:http://www.cnblogs.com/aaa6818162/p/4421305.html 问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状 ...

  3. Threading.Tasks.Task多线程 静态全局变量(字典) --只为了记录

    --------------------------------------------------------------后台代码---------------------------------- ...

  4. .Net多线程编程—System.Threading.Tasks.Parallel

    System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...

  5. 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. ...

  6. 转载 Net多线程编程—System.Threading.Tasks.Parallel

    .Net多线程编程—System.Threading.Tasks.Parallel   System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Paral ...

  7. 一、并行编程 - 数据并行 System.Threading.Tasks.Parallel 类

    一.并行概念 1.并行编程 在.NET 4中的并行编程是依赖Task Parallel Library(后面简称为TPL) 实现的.在TPL中,最基本的执行单元是task(中文可以理解为"任 ...

  8. System.Threading.Tasks

    前言: 我们之前介绍了两种构建多线程软件的编程技术(使用异步委托或通过System.Threading的成员).这两个可以在任何版本的.NET平台工作. 关于System.Threading 的介绍 ...

  9. .NET 4.0 System.Threading.Tasks学习笔记

    由于工作上的需要,学习使用了System.Threading.Tasks的使用,特此笔记下来. System.Threading.Tasks的作用: Tasks命名空间下的类试图使用任务的概念来解决线 ...

随机推荐

  1. MIT Molecular Biology 笔记6 转录的调控

    视频  https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...

  2. 20145232 韩文浩 《Java程序设计》第5周学习总结

    教材学习内容总结 处理异常 教材中使用一个简单的程序,用户连续输入整数最后输入0结束后显示输入数的平均值. 但有时,用户会没有按常规出牌输入不正确的信息,例如"30"输成" ...

  3. android-基础编程-democoderjoy-架构篇

    设计这个demo很简单,针对每个控件放到一个listitem中去,主activity继承之listActivity,这样再override其单击效果进入到每个控件. 主界面流程 1.继承 MainAc ...

  4. linux下的各个目录(待填)

    /系统目录 / 下的目录: 1./bin(binary,二进制文件):打开里面会发现全是绿色的文件,也就是可执行文件,而且名字都是系统命令的名字,其实每个系统命令都是一个小的可执行的文件,这些命令都存 ...

  5. DML DDL

    DDL 1.SQL分为5大类: DDL:数据定义语言 DCL:数据控制语言 DML:数据操纵语言 DTL:数据事务语言 DQL:数据查询语言 2.DDL(data definition languag ...

  6. (动规 或 最短路)Help Jimmy(poj 1661)

    http://poj.org/problem?id=1661 Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的 ...

  7. 查看和杀死进程ps

    $ps -ef #查看执行的进程. $ps -aux | grep java #查看java进程 $sudo kill 进程号 [1] http://www.cnblogs.com/peida/arc ...

  8. c#运用反射获取属性和设置属性值

    /// <summary> /// 获取类中的属性值 /// </summary> /// <param name="FieldName">&l ...

  9. Codeforces821C Okabe and Boxes 2017-06-28 15:24 35人阅读 评论(0) 收藏

    C. Okabe and Boxes time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  10. To datafix AR DATE

    http://www.cnblogs.com/benio/archive/2012/07/07/2580203.html AR transactions should be created on 6- ...