任务队列-单线程消费
作者 : 管理员 发布于 2023-04-25 23:51:52 浏览 594 次
任务队列就是把数据消息放入队列,一个一个的去消费处理。

任务队列就是把数据消息放入队列,一个一个的去消费处理。
先看实例,新建一个任务队列类继承于XiaoFeng.Threading.TaskServiceQueue如下类
T可以是任何数据类型,比如Task,Object,List,IEnumerable,Func,Action<>,委托等

/// <summary>
/// 我的任务队列
/// </summary>
public class MyTaskQueue : XiaoFeng.Threading.TaskServiceQueue<string>
{
    #region 构造器
    /// <summary>
    /// 无参构造器
    /// </summary>
    public MyTaskQueue()
    {

    }
    #endregion

    #region 属性
    /// <summary>
    /// 单例模式,全局使用
    /// </summary>
    private static MyTaskQueue _TaskQueue;
    /// <summary>
    /// 单例模式,全局使用
    /// </summary>
    public static MyTaskQueue TaskQueue
    {
        get
        {
            if (_TaskQueue == null)
            {
                _TaskQueue = new MyTaskQueue();
                _TaskQueue.TaskQueueOk += task =>
                {
                    //TODO:任务成功事件
                };
                _TaskQueue.TaskQueueError += (task, e) =>
                {
                    //TODO:任务失败事件
                };
            }
            return _TaskQueue;
        }
    }
    #endregion

    #region 方法
    /// <summary>
    /// 处理队列任务数据
    /// </summary>
    /// <param name="workItem">数据</param>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns></returns>
    public override Task ExecuteAsync(string workItem, CancellationToken cancellationToken)
    {
        return Task.Run(() =>
        {
            //如果是空则直接返回 不处理
            if (workItem.IsNullOrEmpty()) return;
            //如果是存数字然后操作
            if (workItem.IsMatch(@"^\d+$"))
            {
                //TODO:操作数据,是进数据库,还是调其它方法,或送到其它平台。
            }
        });
    }
    #endregion
}

下边说一下怎么使用当前类

//添加任务
MyTaskQueue.TaskQueue.AddWorkItem("aaa123");

你的工作就是,添加入队,出队数据是怎么处理即可,其它交给TaskServiceQueue处理。

所有评论(0)