Thread.Abort的.Net Core替代方法

        在使用.Net Framework的时候,我们一般用Thread.Start()来开始一个线程,用Thread.Abort()来强制结束这个线程,然而当项目整体迁移到.Net Core的时候,发现程序进行到Thread.Abort()的时候突然崩掉了。

        原因是Thread.Abort 已被弃用。那么结束一个线程的替代方法是什么呢。当尝试采用Thread.Interrupt()后,线程并没有按预期的情况结束,反而是随着线程的不断开启而越来越来以至于卡线程了。

        按照官方的解决方式是使用 CancellationToken 来中止工作单位的处理,而不是呼叫 Thread.Abort。 下列范例示范如何使用 CancellationToken。

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);
    }
}

​        然而本人觉得这个方法略显麻烦,何不从根本的线程运行逻辑上来中断线程,大家知道所有线程不外乎一个循环,我只要能够控制这个循环结束不就行了吗。

        处理方法如下:

        

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;        //强制退出循环
        }
        //线程开始处理
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值