Если вы хотите рассмотреть технологии, не связанные с базами данных, лучшим (хотя и не единственным) решением будет организация очереди сообщений (часто в сочетании с базой данных, содержащей сведения о каждой работе). Очереди сообщений предоставляют множество функций, но основной рабочий процесс прост:
1) Один процесс помещает «сообщение о работе» (возможно, просто идентификатор) в очередь.
2) Другой процесс следит за очередью. Он опрашивает очередь на работу и извлекает найденные задания из очереди, по очереди, в порядке их получения. Элементы, которые вы сняли с очереди, фактически помечаются как «в процессе» - они больше не доступны другим процессам.
3) Для критических рабочих процессов вы можете выполнить транзакционное чтение - в случае сбоя системы транзакция откатывается и сообщение все еще находится в очереди. Если есть какое-то другое исключение (например, тайм-аут во время чтения базы данных), вы можете просто переслать сообщение в специальную очередь ошибок.
Самый простой способ масштабирования - это заставить ваш процесс считывания отправлять несколько потоков для обработки заданий, которые он вытаскивает из очереди. Кроме того, вы можете масштабировать, используя несколько процессов чтения, которые могут быть на отдельных серверах.
.NET поддержка включает в себя Microsoft Message Queue и либо Windows Communication Foundation, либо классы в пространстве имен System.Messaging. Требуется некоторая настройка и настройка (необходимо создать очереди и настроить разрешения), но оно того стоит.