1.Thread的使用
Thread的使用参考:【C#】Thread的使用
2.ThreadPool的使用
.NET Framework 和 .NET Core 提供了 System.Threading.ThreadPool
类来帮助开发者以一种高效的方式管理线程。ThreadPool 是一个线程池,它能够根据需要动态地分配和回收线程,从而提高应用程序的性能。
下面是关于如何在 C# 中使用 ThreadPool 的基本示例:
1. 基本用法
要使用 ThreadPool 来执行一个方法,你可以调用 QueueUserWorkItem
方法。这个方法会将指定的工作项加入到 ThreadPool 的队列中,并由 ThreadPool 决定何时执行。
1.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){// 使用匿名方法来定义工作项ThreadPool.QueueUserWorkItem(state => DoSomeWork(state));Console.WriteLine("Main thread is doing some work...");Console.ReadLine();}static void DoSomeWork(object state){Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} is processing {state}");}
}
2. 获取工作完成的通知
有时需要知道 ThreadPool 已经完成了你的任务。这可以通过向 QueueUserWorkItem
方法传递一个回调委托来实现。
2.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){// 定义回调函数WaitCallback callback = state => DoSomeWork(state);// 注册回调函数ThreadPool.QueueUserWorkItem(callback, "Hello from ThreadPool");// 在主线程上等待一段时间,确保回调被处理Thread.Sleep(1000);Console.WriteLine("Main thread continues...");Console.ReadLine();}static void DoSomeWork(object state){Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} is processing {state}");}
}
3. 设置最大线程数
可以通过设置 ThreadPool.SetMaxThreads
方法来限制 ThreadPool 可以使用的最大线程数。
3.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){int maxWorkerThreads, maxIoCompletionThreads;// 设置最大线程数ThreadPool.SetMaxThreads(50, 100);// 获取最大线程数ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxIoCompletionThreads);Console.WriteLine($"Max Worker Threads: {maxWorkerThreads}");Console.WriteLine($"Max IO Completion Threads: {maxIoCompletionThreads}");Console.ReadLine();}
}
4. 获取当前可用线程数
也可以获取当前 ThreadPool 中可用的线程数量。
4.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){int availableWorkerThreads, availableIoCompletionThreads;// 获取当前可用线程数ThreadPool.GetAvailableThreads(out availableWorkerThreads, out availableIoCompletionThreads);Console.WriteLine($"Available Worker Threads: {availableWorkerThreads}");Console.WriteLine($"Available IO Completion Threads: {availableIoCompletionThreads}");Console.ReadLine();}
}
以上就是一些基本的 ThreadPool 使用示例。
5.请注意
ThreadPool 的设计是为了高效地管理和调度线程,所以它非常适合于那些可以并行执行的任务。然而,对于长时间运行的任务或者对线程控制有更严格要求的任务,可能需要考虑使用其他机制如 Task
或 Task Parallel Library (TPL)
。
3.CancellationTokenSource与Thread的启动、取消的区别
使用参考:
【C#】 CancellationTokenSource 与Thread的启动、取消的区别?-CSDN博客文章浏览阅读816次,点赞10次,收藏9次。【C#】 CancellationTokenSource 与Thread的启动、取消的区别?https://blog.csdn.net/wangnaisheng/article/details/140541192