【C# & 多线程】如何停止正在运行中的子线程

通过协作式取消模式

在线程函数中,你可以周期性地检查一个标志位,以确定是否应该停止线程。该标记位可以是共享变量,也可以是CancellationToken。

CancellationTokenSource 和 CancellationToken 被用来发送取消请求,而任务或线程通过检查 CancellationToken.IsCancellationRequested 属性或调用 ThrowIfCancellationRequested 方法来响应这个请求。

using System;  
using System.Threading;  
using System.Threading.Tasks; 

//
// 方式1:使用CancellationToken,停止标志位来停止线程
//
class CancellationTokenExample  
{
   
     
    private CancellationTokenSource _cts = new CancellationTokenSource();  
  
    public void StartWork()  
    {
   
     
        Task.Run(() =>  
        {
   
     
            try  
            {
   
     
                // 模拟长时间运行的工作,直到有取消请求时,退出while  
                while(!_cts.IsCancellationRequested) 
                {
   
     
                    Thread.Sleep(1000); 
                    //如果有取消请求,也可以通过抛出异常结束线程
                    _cts.</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值