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

2020-02-28 08:17发布

标签:
3条回答
该账号已被封号
2楼-- · 2020-02-28 08:57

学习了,一楼有道理。

查看更多
家丑人穷心不美
3楼-- · 2020-02-28 09:03

books.douban.com/subject/4112979

查看更多
相关推荐>>
4楼-- · 2020-02-28 09:13

解析如下

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

查看更多
登录 后发表回答