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(); } } }
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; }