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

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

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

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

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

应用场景:

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

思路:

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

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

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

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

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

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

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为宣布HarmonyOS4.0将于8月4日正式发布。此前,华为已经针对开发者公布了HarmonyOS4.0,以便于开发者提前进行适配,也因此被曝光出了一些新系统的特性
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
Top