Если вы не хотите использовать идею Л.Бушкина о рабочей очереди, другой подход заключается в использовании того же экземпляра IndexWriter
в веб-приложении, что и фоновые потоки. Вы не объяснили, где находятся 2 потока индексации - если они находятся в том же процессе / домене приложения, что и веб-приложение, должно быть целесообразно использовать один и тот же экземпляр. Если нет, то вы должны использовать эквивалент рабочей очереди, упомянутой Л.Бушкиным, или ее адаптированную версию следующим образом: Добавьте третий поток в процесс индексирования, задачей которого является прослушивание запросов на индексирование из веб-приложения. Вы можете использовать, например, Именованные каналы для этого (особенно легко, если вы используете .NET 3.5). Веб-приложение отправляет запросы на индексирование в третий поток, который использует тот же IndexWriter
, что и другие существующие потоки, для обновления индекса.
По сути, это та же идея, что и у Л.Бушкина (3-й поток является потребителем рабочей очереди), но может потребовать меньше усилий по разработке, поскольку вы могли бы делать меньше дополнительного кодирования.
Обновление: Именованные каналы можно использовать между процессами на разных машинах. Вам просто нужно знать о проблемах брандмауэра, которые могут возникнуть в определенных сетевых топологиях.