¿Por qué el cruce de "contexto" de la función estática de ASP.Net entre sesiones de usuario?

Creo que necesito ayuda para comprender cómo persisten los objetos estáticos en una aplicación ASP.Net. Tengo este escenario:

someFile.cs en una biblioteca de clases:

public delegate void CustomFunction();

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

someOtherFile.cs en una biblioteca de clases:

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

Alguna página de 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();
}

La idea es que tengo un objeto de negocio que realiza alguna operación basada en una función de devolución de llamada en el nivel de la interfaz de usuario. Configuré la función de devolución de llamada a una variable estática en Page_Init (en la versión del código real, en la página maestra, si eso marca una diferencia). Pensé que cada ejecución de la página, sin importar de qué sesión de usuario proviniera, pasaría por la lógica de esa función pero operaría en su propio conjunto de datos. Lo que parece estar sucediendo, en cambio, es un problema de concurrencia.

Si ejecuto una sesión de usuario, entonces mientras está inactiva entre llamadas a esa función de devolución de llamada, inicie otra sesión de usuario, cuando la primera sesión vuelve de inactividad, recoge el ID de sesión de la segunda sesión de usuario. como puede ser esto posible?

Salida de 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)

¿Por qué se sobrescribe el contexto de la función (es decir, sus datos locales, etc.) de una sesión de usuario a otra?

Respuestas a la pregunta(5)

Su respuesta a la pregunta