在使用.Net Framework的时候,我们一般用Thread.Start()来开始一个线程,用Thread.Abort()来强制结束这个线程,然而当项目整体迁移到.Net Core的时候,发现程序进行到Thread.Abort()的时候突然崩掉了。
原因是Thread.Abort 已被弃用。那么结束一个线程的替代方法是什么呢。当尝试采用Thread.Interrupt()后,线程并没有按预期的情况结束,反而是随着线程的不断开启而越来越来以至于卡线程了。
按照官方的解决方式是使用 CancellationToken 来中止工作单位的处理,而不是呼叫 Thread.Abort。 下列范例示范如何使用 CancellationToken。
原因是Thread.Abort 已被弃用。那么结束一个线程的替代方法是什么呢。当尝试采用Thread.Interrupt()后,线程并没有按预期的情况结束,反而是随着线程的不断开启而越来越来以至于卡线程了。
按照官方的解决方式是使用 CancellationToken 来中止工作单位的处理,而不是呼叫 Thread.Abort。 下列范例示范如何使用 CancellationToken。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void ProcessPendingWorkItemsNew(CancellationToken cancellationToken) { if (QueryIsMoreWorkPending()) { // If the CancellationToken is marked as "needs to cancel", // this will throw the appropriate exception. cancellationToken.ThrowIfCancellationRequested(); WorkItem work = DequeueWorkItem(); ProcessWorkItem(work); } } |
然而本人觉得这个方法略显麻烦,何不从根本的线程运行逻辑上来中断线程,大家知道所有线程不外乎一个循环,我只要能够控制这个循环结束不就行了吗。
处理方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | private bool isThreadStart = false ; //增加一个线程控制开关 private Thread thread; //线程启动方法 void ThreadStart() { thread = new Thread(ThreadRun); //初始化一个ThreadRun的线程 isThreadStart = true ; //控制线程开始 thread.Start(); } //线程停止方法 void ThreadStop() { isThreadStart = false ; //控制线程结束 thread = null ; } //线程运行方法 void ThreadRun() { while ( true ) { if (!isThreadStart) { break ; //强制退出循环 } //线程开始处理 } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2020-10-14 IIS服务器多站点多域名同时部署多个不同SSL证书HTTPS实现方法
2019-10-14 windows server 2016 安装网卡驱动
2014-10-14 BIOS简单设置 解析“集成显卡”内存占用问题
2011-10-14 win7无法ping通原因
2006-10-14 解析 XML
2006-10-14 脚本(js)控制页面输入
2006-10-14 Javascript小技巧(6)