Creo que necesito ayuda para entender cómo persisten los objetos estáticos en una aplicación ASP.Net. Tengo este escenario:¿Por qué mi función estática de ASP.Net se cruza "contextualmente" entre sesiones de usuario?
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();
}
}
}
Algunos página 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 UI. Establecí la función de devolución de llamada en una variable estática en Page_Init (en la versión de código real, en la página Maestra, si eso hace la diferencia). Pensé que cada ejecución de la página, sin importar de qué sesión de usuario provenía, 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 su lugar es un problema de concurrencia.
Si ejecuto una sesión de usuario, mientras duerme entre llamadas a esa función de devolución de llamada, inicie otra sesión de usuario, cuando la primera sesión vuelve de dormir, recoge la 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é es el contexto de la función (es decir, sus datos locales, etc.) se sobrescribe de una sesión de usuario a otro?
Gracias, a todos, por la ayuda. Reglas de StackOverflow :) –