private void OnNewFile(string path) { _initialProcessGate.Wait(); // Если мы еще не закончили обрабатывать файлы, которые были в папке, а в ней уже что-то меняют, сначала досчитываем, а потом смотрим, что произошло var file = XFile.ReadText(path).Select(char.ToUpper); var statistics = new Statistics <char>(file); // Если коллизий мало, то выгоднее сразу посчитать значение, потому что иначе это нужно делать под lock'ом и мы теряем всю многопоточность UpdateStatistics(path, statistics); }