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

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

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

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

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

应用场景:

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

思路:

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

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

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

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

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

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

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了——贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
Top