当前位置: 首页 > news >正文

常州做网站信息免费软文网站

常州做网站信息,免费软文网站,具体的网站建设,五金网站模板如何停止正在运行中的子线程 通过协作式取消模式强制终止线程(可能存在资源不能及时释放的泄漏风险) 通过协作式取消模式 在线程函数中,你可以周期性地检查一个标志位,以确定是否应该停止线程。该标记位可以是共享变量&#xff0…

如何停止正在运行中的子线程

  • 通过协作式取消模式
  • 强制终止线程(可能存在资源不能及时释放的泄漏风险)

通过协作式取消模式

在线程函数中,你可以周期性地检查一个标志位,以确定是否应该停止线程。该标记位可以是共享变量,也可以是CancellationToken。

CancellationTokenSource 和 CancellationToken 被用来发送取消请求,而任务或线程通过检查 CancellationToken.IsCancellationRequested 属性或调用 ThrowIfCancellationRequested 方法来响应这个请求。

using System;  
using System.Threading;  
using System.Threading.Tasks; //
// 方式1:使用CancellationToken,停止标志位来停止线程
//
class CancellationTokenExample  
{  private CancellationTokenSource _cts = new CancellationTokenSource();  public void StartWork()  {  Task.Run(() =>  {  try  {  // 模拟长时间运行的工作,直到有取消请求时,退出while  while(!_cts.IsCancellationRequested) {  Thread.Sleep(1000); //如果有取消请求,也可以通过抛出异常结束线程_cts.Token.ThrowIfCancellationRequested();}  }  catch (OperationCanceledException)  {  //线程被取消  }  }, _cts.Token);  }  // 调用此函数来停止线程public void StopWork()  {  _cts.Cancel();  }  
}//
// 方式2:使用共享变量,停止标志位来停止线程
//
class ThreadStopExample  
{  // 停止标志  public volatile bool StopRequested { get; set; }  public void StartWork()  {  Task.Run(() =>  {  while (!StopRequested)  {   Thread.Sleep(1000); // 模拟工作  }  });  }  // 调用此函数来停止线程public void StopWork()  {  StopRequested = true;  }  
}

强制终止线程(可能存在资源不能及时释放的泄漏风险)

如果在线程中使用了一个内层的无限循环(while (true)),这将导致线程永远不会退出这个内层循环,此时要退出线程,除非执行强制停止。

using System;  
using System.Threading;  
using System.Threading.Tasks; class ForceExitCaseExample
{private CancellationTokenSource _cts;private Task task;public void StartWork(){//确保线程没有重复运行if (task == null || (task.IsCompleted || task.IsCanceled)){_cts = new CancellationTokenSource();task = Task.Run(() =>{//注册cancel时,执行Abort方法(不太行,偶尔报异常)//_cts.Token.Register(Thread.CurrentThread.Abort);//注册cancel时,执行Interrupt方法_cts.Token.Register(Thread.CurrentThread.Interrupt);try{bool workDone = false;//模拟长时间运行的工作Thread.Sleep(1000);Console.WriteLine("第一阶段工作完成...");//模拟条件长时间不满足,运行工作死循环while (!workDone){Console.WriteLine("第二阶段工作中...");Thread.Sleep(999);if (false){workDone = true;}}}catch (Exception ex){//线程被取消  Console.WriteLine($"线程异常结束:{ex.Message}");}}, _cts.Token);}}// 调用此函数来停止线程public void StopWork(){_cts.Cancel();}
}
http://www.ds6.com.cn/news/109852.html

相关文章:

  • 蔡甸网站建设域名注册购买
  • 电子科技产品东莞网站建设推广方式有哪几种
  • 网站建设 接单百度关键词排名用什么软件
  • 专业版装修用什么网站做导航条服务营销案例
  • wordpress 文章 日期 红色seo优化啥意思
  • 网站管理端怎么做seo公司推荐推广平台
  • wordpress ppt officeseo技术好的培训机构
  • 营销型网站功能网店推广的作用是什么
  • 搜索引擎入口大全seo关键词排名网络公司
  • wordpress整合ckplayer廊坊优化技巧
  • 如何网站客户案例seo标签优化
  • seo优化网站建设哪家好百度云盘网页登录入口
  • 网页设计页面配色分析seo咨询茂名
  • 基于php做的网站下载广东东莞疫情最新消息
  • 安监网站如何做紧急预案备案seo推广优化
  • 做速卖通的素材有哪些网站鹤壁seo推广
  • ps加dw做网站chatgpt网站
  • 我想做网站怎么做网络推广赚钱项目
  • 如何把做的网站发布到网上博客seo怎么做
  • 项目建设报告怎么写广州网站优化服务商
  • 全县网站建设情况通报seo软件全套
  • 深圳网站建设推广论坛如何在网上推广
  • 汽车网站怎么做网文推广怎么做
  • 黄岐建网站信息流优化师
  • 六安网站定制正规代运营公司排名
  • 苏州吴中区专业做网站沈阳百度推广优化
  • 南宁微网站制作汽车网络营销的方式有哪些
  • 页面设计要怎么做徐州seo排名公司
  • 郑州手机网站建设多少钱短视频推广策略
  • 电商网站建设系统优化设计答案大全英语