任务分发均分

  • 利于数组和单例模式进行均分,数组分发完,再次装填分发,以此循环分配

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

namespace WorkReceivOrder
{

    /// <summary>
    /// 任务分发
    /// </summary>
    public class ReceivOrder
    {

        /// <summary>
        /// 加锁
        /// </summary>
        private static readonly object _lock = new object();


        /// <summary>
        /// 开辟缓存,存储
        /// </summary>
        private static Dictionary<int, List<int>> _Implementers = new Dictionary<int, List<int>>();

        /// <summary>
        /// 获取组织编号
        /// </summary>
        /// <param name="orgid">组织编号</param>
        /// <returns></returns>
        private static List<int> Get_Implementers(int orgid)
        {

            if (_Implementers.TryGetValue(orgid, out List<int> values))
            {
                return values;
            }
            return new List<int>();
        }

        /// <summary>
        /// 设置执行分发人
        /// </summary>
        /// <param name="orgid">组织编号</param>
        /// <param name="reload">重新装填</param>
        private static void Set_Implementers(int orgid, bool reload = false)
        {
            //是否存在
            var nonExistent = false;
            //是否重载数组
            var existDict = false;

            if (reload)
            {
                nonExistent = true;
                existDict = true;
            }
            else if (_Implementers.Count == 0)
            {
                nonExistent = true;
            }
            else if (_Implementers.TryGetValue(orgid, out List<int> values))
            {
                if (values.Count == 0)
                {
                    nonExistent = true;
                }
                existDict = true;
            }
            if (nonExistent)
            {
                //这里操作数组
                //可用redis记录
                var v = new list<int>();

                    if (v.Count > 0)
                    {
   
                        if (existDict)
                        {
                            _Implementers[orgid] = _thisImplementerArr;
                        }
                        else
                        {
                            _Implementers.Add(orgid, _thisImplementerArr);
                        }
                    }
        }

        /// <summary>
        /// 执行人
        /// </summary>
        public static int Implementer(int orgid)
        {

            //初始化,只执行一次
            if (_Implementers.Count == 0 || !_Implementers.TryGetValue(orgid, out _))
            {
                Set_Implementers(orgid);
            }

            //执行人为空
            if (Get_Implementers(orgid).Count > 0)
            {
                lock (_lock)
                {
                    var Implementers = Get_Implementers(orgid);
                    if (Implementers.Count > 0)
                    {
                        var v = Implementers.First();

                        Implementers.RemoveAt(0);

                        //轮询后,进行装箱
                        if (Implementers.Count == 0)
                        {
                            Set_Implementers(orgid, true);
                        }
                        return v;
                    }
                }
            }
            return 0;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38110067/article/details/129308207