Возможная проблема заключается в том, что ваш фоновый поток запущен в пуле приложений веб-сайтов. IIS может решить перезапустить пул приложений, в результате чего дорогостоящая операция будет прервана до ее завершения.
Я бы предпочел вариант, в котором у меня был отдельный процесс, возможно, служба Windows, которая получала бы дорогостоящие запросы операций и выполняла их вне процесса asp.net. Это не только означает, что ваша дорогая операция выдержит перезапуск пула приложений, но и упростит веб-приложение, поскольку оно не должно обрабатывать обработку.
Указание службе выполнить дорогостоящий процесс может быть выполнено с использованием какого-либо межпроцессного взаимодействия, служба может опросить таблицу базы данных или файл, или вы можете использовать очередь управления, которую служба будет слушать.
Есть много способов сделать это, но мой главный момент заключается в том, что вы должны отделить дорогостоящий процесс от вашего веб-приложения, если это возможно.