private static IEnumerable<SledSyntaxCheckerEntry> CheckFiles(IEnumerable<SledProjectFilesFileType> files, SledSyntaxCheckerVerbosity verbosity, object userData, SledUtil.BoolWrapper shouldCancel) { SledHiPerfTimer timer = null; var enumeratedFiles = new List<SledProjectFilesFileType>(files); var errors = new List<SledSyntaxCheckerEntry>(); var fileCount = enumeratedFiles.Count; try { if (verbosity > SledSyntaxCheckerVerbosity.None) { timer = new SledHiPerfTimer(); timer.Start(); } var allWorkItems = new SyntaxCheckerWorkItem[fileCount]; for (var i = 0; i < fileCount; ++i) allWorkItems[i] = new SyntaxCheckerWorkItem(enumeratedFiles[i], verbosity, userData, shouldCancel); var workerCount = Math.Min(ProducerConsumerQueue.WorkerCount, fileCount); using (var pcQueue = new ProducerConsumerQueue(workerCount, shouldCancel)) { pcQueue.EnqueueWorkItems(allWorkItems); } if (shouldCancel.Value) return EmptyEnumerable<SledSyntaxCheckerEntry>.Instance; // gather all results from all work items foreach (var workItem in allWorkItems) errors.AddRange(workItem.Errors); } catch (Exception ex) { SledOutDevice.OutLine( SledMessageType.Error, "{0}: Exception syntax checking files: {1}", typeof(SledLuaSyntaxCheckerService), ex.Message); } finally { if ((timer != null) && (!shouldCancel.Value)) { SledOutDevice.OutLine( SledMessageType.Info, "[Lua] Syntax checked {0} files in {1} seconds", fileCount, timer.Elapsed); } } return errors; }
private static IEnumerable <SledSyntaxCheckerEntry> CheckFiles(IEnumerable <SledProjectFilesFileType> files, SledSyntaxCheckerVerbosity verbosity, object userData, SledUtil.BoolWrapper shouldCancel) { SledHiPerfTimer timer = null; var enumeratedFiles = new List <SledProjectFilesFileType>(files); var errors = new List <SledSyntaxCheckerEntry>(); var fileCount = enumeratedFiles.Count; try { if (verbosity > SledSyntaxCheckerVerbosity.None) { timer = new SledHiPerfTimer(); timer.Start(); } var allWorkItems = new SyntaxCheckerWorkItem[fileCount]; for (var i = 0; i < fileCount; ++i) { allWorkItems[i] = new SyntaxCheckerWorkItem(enumeratedFiles[i], verbosity, userData, shouldCancel); } var workerCount = Math.Min(ProducerConsumerQueue.WorkerCount, fileCount); using (var pcQueue = new ProducerConsumerQueue(workerCount, shouldCancel)) { pcQueue.EnqueueWorkItems(allWorkItems); } if (shouldCancel.Value) { return(EmptyEnumerable <SledSyntaxCheckerEntry> .Instance); } // gather all results from all work items foreach (var workItem in allWorkItems) { errors.AddRange(workItem.Errors); } } catch (Exception ex) { SledOutDevice.OutLine( SledMessageType.Error, "{0}: Exception syntax checking files: {1}", typeof(SledLuaSyntaxCheckerService), ex.Message); } finally { if ((timer != null) && (!shouldCancel.Value)) { SledOutDevice.OutLine( SledMessageType.Info, "[Lua] Syntax checked {0} files in {1} seconds", fileCount, timer.Elapsed); } } return(errors); }