Я бы следовал одному из простых вариантов ниже.
Хранить список обработанных файлов : Идея состоит в том, чтобы записать полный путь обработанного файла в другой файл, таблицу базы данных или, возможно, даже в область памяти.
Служба, которая сначала читает файл, сначала создает запись в этом пространстве. Это для маркировки файла. Другой сервис ищет путь к файлу, прежде чем он начнет обработку вновь созданного файла. Но он не сможет продолжить, поскольку он уже там.
Переместить обработанный файл : создать папку для архивирования обработанных файлов. Служба читает файл, сначала перемещает файл туда и выполняет обработку. Другой сервис не сможет прочитать этот файл. Кстати, эта опция может оказаться недействительной, если вам не разрешено перемещать файл. В этом случае попробуйте сделать копию файла.
Скопировать обработанный файл : аналогично элементу № 1. Сделайте копию файла в папке. Служба читает файл, сначала копирует файл туда и продолжает. Другая служба ищет имя (или другой идентификатор) файла в этой папке копирования. Не удастся продолжить, так как он уже там.
Может быть создано много других вариантов, но основная идея заключается в том, чтобы пометить этот путь к файлу, чтобы он уже обрабатывался или находился в процессе.
Обратите внимание, что вам придется откатиться, если вы не можете завершить обработку файла. В зависимости от выбранной опции, вам нужно удалить запись в списке или переместить файл назад в исходный каталог или удалить копию этого файла.