博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#~异步编程再续~你必须要知道的ThreadPool里的throw
阅读量:6155 次
发布时间:2019-06-21

本文共 1461 字,大约阅读时间需要 4 分钟。

问题依旧存在

,本文主要还是一点补充,之前在IIS经常发w3wp进程无做挂了的情况,但一直没能找到真正的原因,而查找相关资料,找了一些相关的文章,如await和async引起的线程死锁,也都进行了分析,但和我们项目的情况有些不同,因为在我们项目里只用了ThreadPool和Task.Run这种线程池,而异步用了也是异步到底的

今天无意中看到一个文章,说到了在ThreadPool中如果出现异常,并且你没有捕捉它,直接throw了,这时也会引用w3wp进程的死掉,我在电脑上试了一下,确实有这种情况,于是很兴奋!

在事件查看器里的截图

最后将我的线程池方法进行了改良,解决了这个问题

优化后的代码

///     /// 线程管理    ///     public class ThreadManager    {        ///         /// 将在线程池上运行的指定工作排队        ///         ///         public static void Run(Action action)        {            ThreadPool.QueueUserWorkItem(u =>            {                try                {                    action();                }                catch (Exception ex)                {                    Lind.DDD.Logger.LoggerFactory.Instance.Logger_Error(ex);                }            });        }    }

下面我自己做了一个测试,在.net里的4种开启新线程的方式,及它们是否会引起w3wp服务挂掉,做了一个对比,请看代码

      ThreadPool.QueueUserWorkItem((o) =>//w3wp会有挂机问题            {                var b = 0;                var c = 1 / b;            });            Task.Run(() => //不会有挂机问题            {                var b = 0;                var c = 1 / b;            });            new Thread(() =>//w3wp会有挂机问题            {                var b = 0;                var c = 1 / b;            }).Start();            Task.Factory.StartNew(() =>//不会有挂机问题            {                var b = 0;                var c = 1 / b;            });

最后,很高兴找到又一个引起w3wp进程挂掉的原因,希望这次可以真正解决这个问题!

 

转载于:https://www.cnblogs.com/lori/p/5505516.html

你可能感兴趣的文章
[原创]白盒测试技术思维导图
查看>>
<<Information Store and Management>> 读书笔记 之八
查看>>
Windows 8 开发之设置合约
查看>>
闲说HeartBeat心跳包和TCP协议的KeepAlive机制
查看>>
MoSQL
查看>>
Hibernate多对一外键单向关联(Annotation配置)
查看>>
《CLR via C#》读书笔记 之 方法
查看>>
设计模式:组合模式(Composite Pattern)
查看>>
ContentValues 和HashTable区别
查看>>
LogicalDOC 6.6.2 发布,文档管理系统
查看>>
给PowerShell脚本传递参数
查看>>
实战2——Hadoop的日志分析
查看>>
利用FIFO进行文件拷贝一例
查看>>
Ecshop安装过程中的的问题:cls_image::gd_version()和不支持JPEG
查看>>
resmgr:cpu quantum等待事件
查看>>
一个屌丝程序猿的人生(六十六)
查看>>
Java 编码 UTF-8
查看>>
SpringMVC实战(注解)
查看>>
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>