当前位置: 首页 > article >正文

C# 如何使用多线程

在C#中,使用线程可以通过多种方式实现,最常见的方法是使用 System.Threading 命名空间中的 Thread 类和 ThreadPool 类,或者从 .NET Framework 4 开始引入的 Task Parallel Library (TPL)。以下是这些方法的简要介绍和示例。

使用 Thread 类

Thread 类允许你显式地创建和管理线程。

using System;
using System.Threading;
 
class Program
{
    static void Main()
    {
        Thread thread = new Thread(new ThreadStart(DoWork));
        thread.Start();
 
        thread.Join(); // 等待线程完成
        Console.WriteLine("Main thread ends.");
    }
 
    static void DoWork()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Thread is working: " + i);
            Thread.Sleep(1000); // 模拟一些工作
        }
    }
}

使用 ThreadPool 类

ThreadPool 类提供了一种更高级别的线程管理机制,它管理一个线程池来执行异步任务。

using System;
using System.Threading;
 
class Program
{
    static void Main()
    {
        WaitCallback workItem = new WaitCallback(DoWork);
        ThreadPool.QueueUserWorkItem(workItem);
 
        // 主线程可以继续执行其他任务
        Console.WriteLine("Main thread continues to execute.");
 
        // 为了演示,这里等待一段时间让线程池中的任务完成
        Thread.Sleep(5000);
        Console.WriteLine("Main thread ends.");
    }
 
    static void DoWork(object state)
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Thread pool thread is working: " + i);
            Thread.Sleep(1000); // 模拟一些工作
        }
    }
}

使用 Task 和 Task Parallel Library (TPL)

Task 类是 .NET Framework 4 引入的,提供了一种更现代和简洁的方式来并行执行任务。

using System;
using System.Threading.Tasks;
 
class Program
{
    static void Main()
    {
        Task task = Task.Run(() => DoWork());
 
        // 主线程可以继续执行其他任务
        Console.WriteLine("Main thread continues to execute.");
 
        task.Wait(); // 等待任务完成
        Console.WriteLine("Main thread ends.");
    }
 
    static void DoWork()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Task is working: " + i);
            Task.Delay(1000).Wait(); // 模拟一些工作
        }
    }
}

注意事项

  • 线程安全:确保你的代码在多线程环境下是线程安全的,特别是当多个线程访问共享资源时。
  • 异常处理:在线程中执行的代码可能会抛出异常,而这些异常不会自动传播到主线程。你需要显式地捕获和处理这些异常。
  • 性能:创建和销毁线程是昂贵的操作,尽量重用线程或使用线程池。

以上是C#中使用线程的几种常见方法,选择哪种方法取决于你的具体需求和应用场景。

小白路漫漫,让我们一起加油!!!


http://www.kler.cn/a/442851.html

相关文章:

  • HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系
  • HQChart使用教程30-K线图如何对接第3方数据44-DRAWPIE数据结构
  • 计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)
  • 基于YOLOv8的高空无人机小目标检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型
  • 【hadoop学习遇见的小问题】centos常见配置 添加组用户权限 修改主机名等
  • EFCore HasDefaultValueSql
  • 深入理解数据库 JOIN 操作
  • 【Tomcat】第一站:理解tomcat与Socket
  • 【面试问题】JIT 是什么?和 JVM 什么关系?
  • IDEA下加载音频文件操作
  • Linux 查看文件末尾命令 tail 详细介绍
  • [LeetCode-Python版] 876. 链表的中间结点
  • 一键学懂BurpSuite(8)
  • 【Java入门指南 Day11:Lambda表达式与Stream API】
  • 8.2 分库分表简介
  • Java创建对象有几种方式?
  • 理解并使用 sysdig
  • ubuntu监测硬盘状态
  • 图像分割数据集石头rock分割数据集labelme格式2602张3类别
  • Leetcode 208实现Trie树前缀
  • iOS 核心动画
  • 【深入理解ApacheTomcat】
  • 数据结构和算法-06线段树-01
  • DOA估计算法——ESPRIT算法
  • mysql,创建数据库和用户授权核心语句
  • 使用 ts-node插件运行ts