void WorkThread() { isRuning = true; isWorkThreadRun = true; Logs.Info("Logic thread {0} start.", taskName_); var start = OneServer.NowTime; while (isRuning || taskList.Count > 0) { ITaskT <T> task; if (taskList.TryDequeue(out task)) { lastTask = task; watch.Restart(); bool isError = false; try { task.Execute(); } catch (Exception ex) { Logs.Error("{0} run task fail.", taskName_, ex); isError = true; } watch.Stop(); task.Parent = this; var timeTicks = watch.ElapsedTicks; task.TaskProfile.Append(timeTicks, isError); task.WriteLog(timeTicks, isError); task.Release(); var now = OneServer.NowTime; if (now.Ticks - start.Ticks > 10000 * 1000 * 10) { start = now; NetTaskLogWriter.Flush(); ActionTaskLogWriter.Flush(); } lastTask = null; } else { // 队列里没任务,则让线程先休息一小会 Thread.Sleep(1); } } NetTaskLogWriter.Flush(); ActionTaskLogWriter.Flush(); isWorkThreadRun = false; }
/// <summary> /// 添加一个任务 /// </summary> /// <param name="task"></param> public void AppendTask(ITaskT <T> task) { taskList.Enqueue(task); }