Пример #1
0
 public static void AddWaitingTask(WaitingTask waitingTask)
 {
     lock (s_queueLock)
     {
         s_waitingQueue.Enqueue(waitingTask);
         if (!s_timerIsRunning)
         {
             StartTimer();
         }
     }
 }
 public static void AddWaitingTask(WaitingTask waitingTask)
 {
     lock (queueLock)
     {
         waitingQueue.Enqueue(waitingTask);
         if (!timerIsRunning)
         {
             StartTimer();
         }
     }
 }
Пример #3
0
        static void Timer_Tick(object state)
        {
            if (s_working)
            {
                return;
            }
            s_working = true;
            //----------------------
            for (; ;)
            {
                //clear jobs
                WaitingTask waitingTask = null;
                lock (s_queueLock)
                {
                    if (s_waitingQueue.Count > 0)
                    {
                        waitingTask = s_waitingQueue.Dequeue();
                    }
                    else
                    {
                        //no item in queue
                        StopTimer();
                    }
                }
                //-------------
                if (waitingTask != null)
                {
                    //check state
                    if (!waitingTask.DoTask())
                    {
                        //if not finish
                        AddWaitingTask(waitingTask);
                    }
                }
                else
                {
                    break;
                }
            }

            s_working = false;
        }