private void ProcessStart() { Task.Run(() => { double indexTime = _startTimeStamp; Package pkg = new Package() { time = indexTime, }; while (true) { if (_queue.Count == 0) { var t = DateTime.UtcNow.TotalSeconds(); // 向下取整 if (t - indexTime > _intervalTime) { do { if (_flagStop) { return(null); } _writer.Append(pkg); // Core 中不应该有直接输出 //Logger.Info.WriteLine("Pkg_Count: " + pkg.MsgCount // + " Compress_Rate: " + (pkg.codedLength * 100.0 / (pkg.originLength == 0 ? -pkg.codedLength : pkg.originLength)).ToString("f2") + "%" // + " Pkg_Time: " + pkg.time); _infos.Enqueue(new ReplayInfo() { time = DateTime.UtcNow, count = pkg.MsgCount, codedLength = pkg.codedLength, originLength = pkg.originLength, pkgTime = pkg.time }); indexTime += _intervalTime; //pkg = new Package() //{ // time = indexTime, //}; pkg.time = indexTime; pkg.Clear(); }while (indexTime + _intervalTime < t); } SleepHelper.Delay(1); continue; } _queue.TryDequeue(out Message item); // 向下取整 if (item.header.time - indexTime > _intervalTime) { do { if (_flagStop) { return(null); } _writer.Append(pkg); // Core 中不应该有直接输出 //Logger.Info.WriteLine("Pkg_Count: " + pkg.MsgCount // + " Compress_Rate: " + (pkg.codedLength * 100.0 / (pkg.originLength == 0 ? -pkg.codedLength : pkg.originLength)).ToString("f2") + "%" // + " Pkg_Time: " + pkg.time); _infos.Enqueue(new ReplayInfo() { time = DateTime.UtcNow, count = pkg.MsgCount, codedLength = pkg.codedLength, originLength = pkg.originLength, pkgTime = pkg.time }); indexTime += _intervalTime; //pkg = new Package() //{ // time = indexTime, //}; pkg.time = indexTime; pkg.Clear(); }while (indexTime + _intervalTime < item.header.time); } pkg.Add(item); } }); }