public static void Sync(params Action[] pars)
        {
            if (_totalActive < ConsumerSize)
            {
                Init();
            }

            if (pars != null)
            {
                var lstTask = new List <Task>();
                foreach (var item in pars)
                {
                    var tsk = Task.Run(() =>
                    {
                        bool running = true;
                        QueueProccess.Add(() =>
                        {
                            try
                            {
                                item();
                            }
                            catch (Exception ex)
                            {
                            }
                            running = false;
                        });
                        while (running)
                        {
                        }
                    });
                    lstTask.Add(tsk);
                }
                Task.WaitAll(lstTask.ToArray());
            }
        }
        public static void Async(params Action[] pars)
        {
            if (_totalActive < ConsumerSize)
            {
                Init();
            }

            if (pars != null)
            {
                foreach (var item in pars)
                {
                    var tsk = Task.Run(() =>
                    {
                        QueueProccess.Add(() =>
                        {
                            try
                            {
                                item();
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex);
                            }
                        });
                    });
                }
            }
        }
예제 #3
0
        public static void MutilProcessing()
        {
            Action action = () => {
                Console.WriteLine(Thread.CurrentThread.Name);
            };

            Action[] actions = new Action[] {};
            actions.Append(action);
            actions.Append(action);
            actions.Append(action);
            QueueProccess.Async(actions);
        }
 private static void Init()
 {
     if (_totalActive < ConsumerSize)
     {
         Action action = () =>
         {
             try
             {
                 QueueProccess.ConsumerActive();
                 while (true)
                 {
                     Action item = null;
                     while (_lstQueue.TryDequeue(out item))
                     {
                         if (item != null)
                         {
                             item();
                         }
                     }
                 }
             }
             catch (Exception ex)
             {
                 throw ex;
             }
             finally
             {
                 QueueProccess.ConsumerDeactive();
             }
         };
         Action[] pars = new Action[ConsumerSize - _totalActive];
         for (int i = 0; i < ConsumerSize - _totalActive; i++)
         {
             pars[i] = action;
         }
         Task.Run(() =>
         {
             Parallel.Invoke(pars);
         });
     }
 }