老婆出轨 发表于 2025-1-8 20:53:40

C#多线程精解

概述:在C#多线程编程中,公道终止线程是关键挑战。通过标志位或CancellationToken,实现安全、协作式的线程终止,确保在适当时机终止线程而避免资源泄漏。
应用场景:

在C#多线程编程中,有时需要终止正在运行的线程,例如在用户取消操作、步伐关闭等环境下。
思绪:

线程终止通常涉及到互助式终止而非强制终止,因为强制终止可能导致资源泄漏和不确定的状态。一般接纳标志位、信号等方式,让线程自行安全地退出。
方法和步骤:
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时自动退出。
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方法通知线程终止。
在实际应用中,需要根据具体场景选择合适的终止线程的方式,并确保线程可以或许在终止时完成整理工作。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C#多线程精解