首页 新闻 会员 周边

asp.netcore 前台线程结束了,后台线程确还是执行了,为什么?求大神指导或者给个方向

0
悬赏园豆:200 [已解决问题] 解决于 2020-02-28 09:19

嘻嘻小北的主页 嘻嘻小北 | 初学一级 | 园豆:26
提问于:2020-02-27 21:24
< >
分享
最佳答案
1

解析如下

Console App执行

1. Task是在线程池中的线程上执行的(线程池所有线程都是后台线程)
2. Console的启动线程默认是主线程(前台线程)
3. 在控制台中启动线程结束,你手动创建的t1是前台线程,会阻止进程结束
4. t1执行结束后, 没有前台线程了, 整个进程结束, 所以task2方法没有执行完毕(不是没有执行)

asp.net core执行

1. asp.net core的所有处理请求的线程都是线程池线程
2. 整个asp.net core core的runtime(也就是Main方法所在的线程是一直运行着, 只有停止整个站点才停止)
3. 线程池线程在前台线程(即启动整个应用的Main线程)没有全部结束,而自身又没有抛出异常, 所以task1和task2方法都会正常执行到结束

综上所述: 你对.NET的线程理解存在盲点(CLR Via C#值得一看, CLR via C#:3rd

收获园豆:200
thinkershare | 菜鸟二级 |园豆:402 | 2020-02-28 01:30

谢啦

嘻嘻小北 | 园豆:26 (初学一级) | 2020-02-28 09:19
其他回答(2)
0

books.douban.com/subject/4112979

Tofe | 园豆:202 (菜鸟二级) | 2020-02-28 03:07
0

学习了,一楼有道理。

数据酷软件 | 园豆:130 (初学一级) | 2020-02-28 08:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册