Если я вас правильно понял, вы хотите кешировать сгенерированные отчеты и больше не работать.Как отмечали другие комментаторы, это можно изящно решить с помощью нескольких очередей «производитель / потребитель» и некоторых кэшей.Сначала вы ставите в очередь свой запрос на отчет.Основываясь на параметрах формирования отчета, вы можете сначала проверить кэш, если ранее созданный отчет уже доступен, и просто вернуть его.Если из-за изменений в базе данных отчет устарел, вам нужно позаботиться о том, чтобы кэш был надежно аннулирован.
Теперь, если отчет еще не был сгенерирован, вам нужно запланировать создание отчета.Планировщик отчетов должен проверить, генерируется ли уже тот же отчет.Если да, зарегистрируйте событие, чтобы уведомить вас о его завершении и вернуть отчет после его завершения.Убедитесь, что у вас нет доступа к данным через уровень кэширования, поскольку он может привести к гонкам (создается отчет, данные изменяются, и готовый отчет немедленно удаляется из кэша, оставляя уведомление о возврате).
Или, если вы хотите запретить возвращать устаревшие отчеты, вы можете позволить слою кэширования стать вашим основным поставщиком данных, который будет генерировать столько отчетов, пока не будет создан один отчет за время, которое не устарело.Но имейте в виду, что если у вас есть постоянные изменения в вашей базе данных, вы можете войти в бесконечный цикл, постоянно генерируя недействительные отчеты, если время генерации отчета больше, чем среднее время между изменениями в вашей базе данных.
Как видите, у вас есть множество вариантов, не говоря уже о .NET, TPL, SQL-сервере.Сначала вам нужно установить свои цели, насколько быстрой / масштабируемой и надежной должна быть ваша система, затем вам нужно выбрать подходящую архитектуру, как описано выше для вашей конкретной проблемной области.Я не могу сделать это для вас, потому что у меня нет вашего полного домена, который знает, что приемлемо, а что нет.
Хитрая часть - это часть передачи между различными очередями с надлежащей гарантией надежности и правильности.В зависимости от ваших конкретных требований к генерации отчетов, вы можете поместить эту логику в облако или использовать один поток, помещая всю работу в соответствующие очереди и работая с ними одновременно, один за другим или между ними.
TPL и SQL-сервер могут помочь в этом, но это всего лишь инструменты.При неправильном использовании из-за недостаточного опыта работы с одним или другим может оказаться, что другой подход (например, использование только в очередях памяти и постоянных отчетах в файловой системе) лучше подходит для вашей проблемы.
Исходя из моего нынешнего понимания, я бы не стал использовать сервер SQL для неправильного использования его в качестве кэша, но если вам нужна база данных, я бы использовал что-то вроде RavenDB или RaportDB , которые выглядятстабильный и гораздо более легкий, по сравнению с полноценным SQL-сервером.
Но если у вас уже работает SQL-сервер, продолжайте и используйте его.