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

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

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

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

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

应用场景:

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

思路:

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

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

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

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

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

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

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、“Ringdoll戒之人形”淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • OPPO Reno10 Pro英雄联盟定制礼盒公布:萨勒芬妮同款配色梦幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新机,全系标配了超光影长焦镜头,是迄今为止拍照
Top