Я думаю, что проблема с сохранением результата в кеше заключается в том, что ASP.NET может очистить эту запись в кэше для других целей (например, если у нее недостаточно памяти, если она раздражительна и т. Д.). Что-то, что подается из кэша, должно быть чем-то, что вы можете воссоздать по требованию, если оно не найдено в кэше, среда выполнения ASP.NET может свободно выгружать записи кэша, когда захочет.
Использование кеша в обсуждении бейджа кажется принципиально другим, в этом случае задача была недолгой. Кэш просто использовался как хакерский таймер для периодического запуска задачи.
Можете ли вы подтвердить, что это задача, которая займет 5 минут и потребует отдельного потока все это время? Само по себе это проблема производительности, вы сможете поддерживать ограниченное количество таких запросов, если для каждого так долго требуется собственный поток. Только если это приемлемо, я позволю заданию так долго продвигаться.
Если для этих задач вполне приемлемо закрепить поток, то я бы просто сохранил результат в глобальном словаре процесса. Ключ словаря будет соответствовать клиентскому запросу / серии обратных вызовов AJAX. Ключ также должен включать идентификатор пользователя, если безопасность вообще важна.
Если вам нужно масштабировать до нескольких пользователей, то я думаю, что вам нужно разбить задачу на асинхронные этапы, и в этом случае я бы, вероятно, использовал таблицу БД для хранения результатов (опять-таки ключ по запросу / пользователю ).