Я хотел бы предложить здесь свои выводы, связанные с этим вопросом, как я наблюдал в IIS6:
Я много занимался этой проблемой в IIS6 и нашел несколько интересных результатов, использующих log4net и рефлексию для захвата истории выполнения. Я обнаружил, что за кулисами происходит обширное «управление потоками». Кажется, что существует «первичная» серия потоков, которая соответствует от 1: 1 до HttpApplication
. Однако эти потоки не должны обрабатывать конвейер исключительно по вашему запросу. Различные различные подпотоки могут быть вызваны при обращении к этим экземплярам. Последующие новые запросы и запросы ресурсов, используемые вашим приложением, по-видимому, содержат некоторую постоянную информацию, относящуюся к вашему первоначальному запросу, но еще никогда полностью не обрабатываются исходным потоком, указывающим некоторый тип отношений. Я не мог различить какой-либо конкретный образец (кроме того, что я ранее описал) относительно того, какие элементы были разделены на другие потоки, поскольку это было на первый взгляд случайным. Мой вывод к этому доказательству состоит в том, что существует какая-то концепция иерархического объединения? происходит, когда некоторое неизвестное подмножество ссылочных элементов наследуется в дочерних потоках через родительскую ссылку.
Так что в качестве ответа я бы сказал, что HttpModules
разделены между потоками. С точки зрения блокировки значений экземпляров это будет применимо, если значения применяются ко всем запросам, которые используют модуль и должны поддерживать некоторое состояние. Я мог бы счесть это полезным, если пытался поддерживать значения экземпляров с состоянием, которые дорого выяснить, чтобы их можно было повторно использовать в последующих запросах.
Эта проблема беспокоила меня в течение некоторого времени, надеюсь, эта информация кому-то поможет.