Почему в моей статической функции ASP.Net «контекст» пересекается между сеансами пользователя?

Я думаю, что мне нужна помощь в понимании того, как статические объекты сохраняются в приложении ASP.Net. У меня есть этот сценарий:

someFile.cs в библиотеке классов:

public delegate void CustomFunction();

public static class A {
    public static CustomFunction Func = null;
}

someOtherFile.cs в библиотеке классов:

public class Q {
    public Q() {
        if (A.Func != null) {
            A.Func();
        }
    }
}

Некоторая страница ASP.Net:

Page_Init {
    A.Func = MyFunc;
}

public void MyFunc() {
    System.IO.File.AppendAllText(
        "mydebug.txt", DateTime.Now.ToString("hh/mm/ss.fff", Session.SessionID));
}

Page_Load {
    Q myQ = new Q();
    System.Threading.Thread.Sleep(20000);
    mQ = new Q();
}

Идея состоит в том, что у меня есть бизнес-объект, который выполняет некоторые операции на основе функции обратного вызова на уровне пользовательского интерфейса. Я установил функцию обратного вызова для статической переменной в Page_Init (в реальной версии кода, на главной странице, если это имеет значение). Я думал, что каждое выполнение страницы, независимо от того, с какого пользовательского сеанса она идет, будет проходить через логику этой функции, но работать с собственным набором данных. То, что происходит вместо этого, является проблемой параллелизма.

Если я запускаю один пользовательский сеанс, то, пока он спит между вызовами этой функции обратного вызова, запускает другой пользовательский сеанс, когда первый сеанс возвращается из спящего режима, он получает идентификатор сеанса из второго сеанса пользователя. Как это может быть возможным?

Вывод mydebug.txt:

01/01/01.000 abababababab  (session #1, first call)
01/01/05.000 cdcdcdcdcdcd  (session #2, first call - started 5 seconds after session #1)
01/01/21.000 cdcdcdcdcdcd  (session #1 returns after the wait but has assumed the function context from session #2!!!!!)
01/01/25.000 cdcdcdcdcdcd  (session #2 returns with its own context)

Почему контекст функции (то есть ее локальные данные и т. Д.) Перезаписывается из одного сеанса пользователя в другой?

Ответы на вопрос(5)

Ваш ответ на вопрос