当前位置:首页 > 科技  > 软件

C#多线程精解:优雅终止线程的实用方法与技巧

来源: 责编: 时间:2024-04-23 18:02:18 105观看
导读概述:在C#多线程编程中,合理终止线程是关键挑战。通过标志位或CancellationToken,实现安全、协作式的线程终止,确保在适当时机终止线程而避免资源泄漏。应用场景:在C#多线程编程中,有时需要终止正在运行的线程,例如在用户取

XEg28资讯网——每日最新资讯28at.com

概述:在C#多线程编程中,合理终止线程是关键挑战。通过标志位或CancellationToken,实现安全、协作式的线程终止,确保在适当时机终止线程而避免资源泄漏。XEg28资讯网——每日最新资讯28at.com

应用场景:

在C#多线程编程中,有时需要终止正在运行的线程,例如在用户取消操作、程序关闭等情况下。XEg28资讯网——每日最新资讯28at.com

思路:

线程终止通常涉及到合作式终止而非强制终止,因为强制终止可能导致资源泄漏和不确定的状态。一般采用标志位、信号等方式,让线程自行安全地退出。XEg28资讯网——每日最新资讯28at.com

方法和步骤:

1.使用标志位控制线程执行:

using System;using System.Threading;public class Worker{    // 标志位,用于控制线程执行    private volatile bool shouldStop = false;    public void DoWork()    {        while (!shouldStop)        {            // 线程执行的工作            Console.WriteLine("Working...");            Thread.Sleep(1000); // 模拟工作        }    }    // 设置标志位,终止线程    public void StopWork()    {        shouldStop = true;    }}public class Program{    public static void Main()    {        Worker worker = new Worker();        // 启动线程执行工作        Thread thread = new Thread(worker.DoWork);        thread.Start();        // 模拟运行一段时间后,终止线程        Thread.Sleep(5000);        worker.StopWork();        // 等待线程结束        thread.Join();        Console.WriteLine("Thread stopped.");    }}

上述代码中,通过设置shouldStop标志位,线程在下一个循环中检查到标志位为true时自动退出。XEg28资讯网——每日最新资讯28at.com

2.使用CancellationToken终止线程:

using System;using System.Threading;public class Worker{    // CancellationTokenSource用于生成CancellationToken    private CancellationTokenSource cts = new CancellationTokenSource();    public void DoWork()    {        CancellationToken token = cts.Token;        while (!token.IsCancellationRequested)        {            // 线程执行的工作            Console.WriteLine("Working...");            Thread.Sleep(1000); // 模拟工作        }    }    // 使用CancellationToken请求终止线程    public void StopWork()    {        cts.Cancel();    }}public class Program{    public static void Main()    {        Worker worker = new Worker();        // 启动线程执行工作        Thread thread = new Thread(worker.DoWork);        thread.Start();        // 模拟运行一段时间后,终止线程        Thread.Sleep(5000);        worker.StopWork();        // 等待线程结束        thread.Join();        Console.WriteLine("Thread stopped.");    }}

上述代码中,通过CancellationToken及其关联的CancellationTokenSource,在StopWork方法中调用Cancel方法通知线程终止。XEg28资讯网——每日最新资讯28at.com

在实际应用中,需要根据具体场景选择合适的终止线程的方式,并确保线程能够在终止时完成清理工作。XEg28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-84906-0.htmlC#多线程精解:优雅终止线程的实用方法与技巧

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Sass 完全指南,一起来看看 Sass 中常用的功能吧!

下一篇: 你真的知道吗?Python中什么变量会返回false

标签:
  • 热门焦点
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 让我们一起聊聊文件的操作

    让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 阿里大调整

    阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top
Baidu
map