public async Task <ScanResult> ScanNext(Repository repo, IteratorItem item) { ScanResult retVal = null; string extention = ""; Log.Trace("Started processing: " + item.DataObjectIdentifier + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); try { if (item == null) { return(null); } Dictionary <string, List <string> > identifiers = null; FileInfo file = new FileInfo(item.DataObjectIdentifier); extention = file.Extension; // Don't scan files that are too big if (file.Length > _maxFileSize * 1000000) { Log.Warn("File too big:" + file.FullName + ", Size:" + file.Length); Counter.Add("file_too_big", 1); } else { // Get text of the file string txt = await FileUtils.Parse(file); if (txt != null && txt.Length > 0) { //Do NER identifiers = await NER.Parse(txt, file.FullName); if (identifiers != null && identifiers.Count > 0) { Counter.Add("found_pi", 1); // Get metadata item = await CollectFileMetadata(item, file); retVal = new ScanResult() { DataObjectIdentifier = item.DataObjectIdentifier, Identifiers = identifiers, Metadata = item.Metadata, RepositoryId = repo.id }; // Store results await SMBDal.AddDataObjectForMatching(retVal); } else { Counter.Add("didnot_find_pi", 1); } } Log.Info("Processed file:" + file.FullName + ", Identifiers: " + (identifiers == null ? "0" : identifiers.Count.ToString())); } } catch (Exception ex) { Log.Error(ex, "Failed to process file: " + item.DataObjectIdentifier); return(null); } Log.Trace("Finished processing: " + retVal.DataObjectIdentifier + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); Counter.Add(extention, 1); return(retVal); }