Cod Rob, тебе надо просто верхнеуровнево нарисовать диаграмму работы программы, чтобы понять. что нужно использовать. тут вообще можно одним локом обойтись
Cod Rob, предлагаю сначала выучить теорию по параллельности, многопоточности и структурах данных для них. вижу многое не понятно пока, а подставлять объекты и думать что все заработает магическим образом - плохая затея
Cod Rob, значит лучше сделать такую реализацию:
1. Весь список файлов делишь между этими 3 потоками
2. Каждый поток синхронно работает с этими файлами - блокировка не нужна
3.1. Для записи в файл результирующий пусть у тебя будет отдельный объект, который через лок это и делает
3.2. Либо это будет отдельный поток, а синхронизация между ними реализована с помощью BlockingCollection
Cod Rob, где его можно добавить? внутри метода все синхронно происходит - никаких гонок нет, а если нужно просто параллельно добавлять записи в список, то лок на объект будет гораздо эффективнее, чем ConcurrentBag
Cod Rob, здесь вообще никакого Concurrency нет.
Во-первых, внутри метода достаточно использовать List
Во-вторых, для ReadEmails и других полей объекта используй обычные List, а когда захочешь их обновлять/читать - просто используй на них lock
Nik Faraday, тогда можно попробовать так:
1. Таблица одна - [page_id, date, visits_count] - id страницы, дата (только дата без времени) посещения, кол-во посещений
2. На каждый заход на страницы вызывается UPDATE SET visits_count += 1 WHERE date = today() AND page_id = id
3. Для годовых/месячных/дневных делаешь материализованное представление
P.S. - т.к. годовые/месячные/дневные больше не обновляются, то можно создать для них отдельную таблицу и хранить уже подсчитанные значения там. Обновлять скриптом по окончании периода.