В асинхронном http-обработчике мы добавляем элементы в кеш ASP.NET с зависимостями от некоторых файлов. Если асинхронный метод выполняется в потоке из ThreadPool, все в порядке:
AsyncResult result = new AsyncResult(context, cb, extraData);
ThreadPool.QueueUserWorkItem(new WaitCallBack(DoProcessRequest), result);
Но как только мы пытаемся выполнить поток из ThreadPool:
AsyncResult result = new AsyncResult(context, cb, extraData);
Runner runner = new Runner(result);
Thread thread = new Thread(new ThreadStart(runner.Run());
... где Runner.Run просто вызывает DoProcessRequest,
Зависимости срабатывают сразу после выхода из потока. То есть элементы немедленно удаляются из кэша, причина - в зависимостях.
Мы хотим использовать поток вне пула, потому что обработка может занять много времени.
Так что, очевидно, чего-то не хватает, когда мы создаем поток. Возможно, нам придется распространять контекст вызова, контекст http ...
Кто-нибудь уже сталкивался с этой проблемой?
Примечание: стандартные пользовательские пулы, вероятно, решают эту проблему. Написание собственного пула потоков - это, вероятно, плохая идея (подумайте о синдроме NIH). И все же я хотел бы разобраться в этом подробнее.