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

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

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

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

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

应用场景:

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

思路:

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

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

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

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

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

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

标签:
  • 热门焦点
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的“新电商三兄弟”成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top