private void FlushExpiredJobs(object state) { DateTimeOffset cutoff = DateTimeOffset.Now - _jobFlushExpiration; LogDebug($"Ending monitoring for all print jobs not updated since {cutoff}."); List <long> ids = _printJobDataBuilders.Where(n => n.Value.LastUpdate < cutoff).Select(n => n.Key).ToList(); foreach (long id in ids) { if (_printJobDataBuilders.TryGetValue(id, out PrintJobDataBuilder printJobDataBuilder)) { var printJobData = printJobDataBuilder.BuildPrintJobDataEventArgs(); LogDebug($"Print job {printJobData.Job.Id} is no longer being monitored."); ThreadPool.QueueUserWorkItem(_ => PrintJobMonitoringFinished?.Invoke(this, printJobData)); } _printJobDataBuilders.Remove(id); } LogDebug($"{ids.Count} print jobs removed."); }
private void PrintJobDataBuilder_PrintJobComplete(object sender, PrintJobDataEventArgs e) { LogDebug($"Print job {e.Job.Id} is finished."); ThreadPool.QueueUserWorkItem(_ => PrintJobMonitoringFinished?.Invoke(this, e)); _printJobDataBuilders.Remove(e.Job.Id); }