Ответ в форме: Требование - Инструмент
Запланированные прогоны - Quartz.NET
Кварц позволяет запускать «задания» по любому заданному расписанию.Он также поддерживает состояние между запусками, поэтому, если по какой-то причине сервер выходит из строя, когда он возвращается, он знает, что должен начать работу.Довольно классные вещи.
Распределенная очередь - NServiceBus
Хороший сервисный автобус стоит на вес золота.По сути, вы хотите, чтобы все ваши сотрудники выполняли только определенную операцию, несмотря на то, что многие операции поставлены в очередь.Если вы гарантируете, что ваши операции идемпотентны NServiceBus - отличный способ сделать это.
Очередь -> Работник1 + = Работник 2 + = Работник 3 -> Локальное хранилище данных -> Очередь данных+ Рабочие -> Удаленное хранилище данных
В основном для того, чтобы обеспечить возвращаемые значения заданногооперации достаточно изолированы от SQL Server, который вы хотите удостовериться, и кэшируйте значение где-нибудь в локальной системе хранения.Это может быть что-то быстрое и нереляционное, как RavenDB, или что-то структурированное, как SQLite.Затем вы бросаете какой-то идентификатор в другую очередь через NServiceBus и синхронизируете его с SQL Server, очереди - ваш друг!: -)
В сущности, вы хотите убедиться, что ни одна из ваших операций не блокируется идостаточно атомный.Если вы еще не знаете о TPL, вам стоит это сделать.Я много слышал об этом от людей из Java, но стоит упомянуть ... C # становится действительно отличным языком для асинхронных и параллельных рабочих процессов!
Еще одна интересная вещь, появившаяся в новой Async CTP, - TPL DataFlow.Я этим не пользовался, но, похоже, прямо в твоем переулке!