本篇文章给大家分享的是有关使用c#怎么实现一个轻量级多线程队列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
首先要说的是使用方法,当我设置使用一个线程的时候如下代码:
var manager =, new QueueManager (new QueueConfirguration (1,, 10000,,,, QueueTaskMode.Task,, new JobPriorityScheduleConfig (DateTime.Now, new 时间间隔(0,1,0))); manager.Start (); , for (int 小姐:=,0;,小姐:& lt;, 20;,我+ +) { ,manager.AddJob (new Job(我,(索引),=比; ,{ Console.WriteLine才能($“线程id: {System.Threading.Thread.CurrentThread.ManagedThreadId},当前序号:{指数}“); ,})); } Console.WriteLine($“主线程ID: {System.Threading.Thread.CurrentThread.ManagedThreadId}“);
输出结果如下
可以看到使用QueueManager类的线程都是ID=4的线程上执行,这是由于我们设置的是一个线程,主线程的ID为1,并且可以看到工作中的代码是异步执行的。当我们将线程数设置成2的时候输出如下
使用其它是不是很简单? ?
<强>那么我分别来讲一下QueueManager类的参数强>
1。QueueConfirguration类,结构如下。
, public class QueueConfirguration : IQueueConfirguration ,{ ,private int  taskMaxCount; ,private int  taskDelay; ,private int 时延; , ,,,///,& lt; summary> ,,,///, ,,,///,& lt;/summary> ,,,///,& lt; param name=皌askMaxCount"祝辞Thread count ,,,///,& lt; param name=皌askDelay"祝辞thread free sleep interval ,,,///,& lt; param name=癲elayTimes"祝辞sleep times ,public QueueConfirguration (int taskMaxCount, int taskDelay,, int 时延) ,{ 时间=this.taskMaxCount 才能;taskMaxCount; 时间=this.taskDelay 才能;taskDelay; 时间=this.delayTimes 才能;时延; ,} , ,public int TaskMaxCount  {, get {, return this.taskMaxCount,},} , ,public int TaskDelay  {, get {, return this.taskDelay,},} , ,public int DelayTimes  {, get {, return this.delayTimes,},} 以前,}>TaskMaxCount:线程数量,TaskDelay:为空闲时线程睡眠时间单女士(位),延迟时间:睡眠次数
2。QueueTaskMode:枚举类型,提供两种多线程使用方式线程和任务
3。JobPriorityScheduleConfig:实现接口IJobPriorityScheduleConfig,用来提升工作的优先级。
各位朋友可能也看到了我使用了一个工作类目前总共有三种工作类型
- <李>
工作:无参数无返回
李> <李> Job
Job
当然,代码中还有很多地方可以优化,譬如:
- <李>
当线程处于睡眠中时,需有工作要执行时的中断。李李
> <>AddJob方法可以加一些重载。
李> <李>实现中的事件可以修改为委托,以达到减少一些委托类型的定义。
李>以上就是使用c#怎么实现一个轻量级多线程队列,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。