private static void Working() { while (true && _workNotOver) { try { if (QueueTasks.Count == 0) { QueueTaskEvent.WaitOne(); continue; } IQueueTask task = null; lock (_lockDequeue) { //这边有可能拿到0数量 if (QueueTasks.Count == 0) continue; task = QueueTasks.Dequeue(); } task.Do(); } catch (Exception exp) { HZLogger.Error(string.Format("队列任务处理发生异常 {0}", JsonConvert.SerializeObject(exp))); } } }
public static void StopWoking() { HZLogger.Info(string.Format("队列停止工作 还有{0}个任务未完成", QueueTasks.Count)); _workNotOver = false; QueueTasks = new Queue<IQueueTask>(); QueueTaskEvent.Set(); }
public void Do() { string message = string.Empty; try { message = string.Format(" QueueTask Done. Data:{0}", this.Data); HZLogger.Info(message); } catch (FormatException exp) { HZLogger.Error(exp); } catch (Exception exp) { HZLogger.Error(exp); } }
public static void Enqueue(IQueueTask pQueueTask) { if (!_workNotOver) return; lock (_lockEnqueue) { try { QueueTasks.Enqueue(pQueueTask); QueueTaskEvent.Set(); } catch (Exception exp) { HZLogger.Fatal(string.Format("队列控制器发生异常 {0}", JsonConvert.SerializeObject(exp))); } } }