C#异步数据处理-WorkQueue

2021-03-17 11:26

阅读:667

标签:thread   station   清空   clear   list   add   long   安全   efault   

介绍

工作队列主要用于异步处理消息,详细介绍参考其他文章,这里主要提供使用方法

类似方法有List、HashMap、Dir,但是性能略逊一筹。

场景举例

硅晶片标刻:

通讯协议采用TCP协议

1、程序(Server)对接上游LAMA机器(Client),接受标刻条码信息。

2、程序(Client)控制激光打标机(Server),在硅晶片上标刻条码

3、程序(Client)读取扫码器(Server)读码信息,并于标刻条码信息对比

简单调用举例

struct recivecode
    {
        public string ID;
        public string STATION;
    }
WorkQueue l_queue = new WorkQueue();
WorkQueue l_markcode = new WorkQueue();
recivecode REC = new recivecode();
REC.ID = IDimforation;
REC.STATION = station;
l_queue.EnqueueBox(REC);
recivecode code = l_queue.TryDequeueBox();
Console.WriteLine(code.ID);

源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Concurrent;
using System.Threading;

namespace laser_code
{
    /// 
    /// 表示线程安全的队列
    /// 
    /// 
    public class WorkQueue : ConcurrentQueue
    {
        private int _size = 100;
        private DateTime _time;
        public DateTime Time
        {
            get { return _time; }
            set { _time = value; }
        }
        public int Size
        {
            get { return _size; }
            set { _size = value; }
        }
        /// 
        /// 移除并返回开始处的对象
        /// 
        /// 
        public T TryDequeueBox()
        {
            T _obj = default(T);
            if (!this.IsEmpty)
            {
                this.TryDequeue(out _obj);
                this._time = DateTime.Now;
            }
            return _obj;
        }
        /// 
        /// 将对象添加到队列末尾
        /// 
        /// 
        public void EnqueueBox(T box)
        {
            if (this._size > this.Count)
            {
                this.Enqueue(box);
                _time = DateTime.Now;
            }
            else
            {
                this.Clear();
            }
        }
        /// 
        /// 清空队列
        /// 
        /// 
        public List Clear()
        {
            T _obj = default(T);
            List objectT = new List();
            do
            {
                this.TryDequeue(out _obj);
                objectT.Add(_obj);
            } while (this.Count != 0);
            return objectT;
        }
    }
}

C#异步数据处理-WorkQueue

标签:thread   station   清空   clear   list   add   long   安全   efault   

原文地址:https://www.cnblogs.com/aqyl/p/12389318.html


评论


亲,登录后才可以留言!