Tengo un código que tengo actualmente en una clase/método estático, pero quería comprobar que sería seguro para subprocesos. Por lo que he leído, creo que esto debería estar bien, pero algo en el fondo de mi mente es decir que podría no serlo. La etapa de procesamiento de datos de mi página web usa un servicio web externo para crear registros de pedidos, y esto podría ser bastante lento: posiblemente entre 30 y 40 segundos, posiblemente, 5 o 10 minutos (esto está fuera de mi alcance), así que iba a disparar una página de retorno al usuario, luego comience un nuevo hilo y luego envíe un correo electrónico al usuario una vez que se complete el proceso. Esto se encuentra actualmente en una clase/método estático. Siempre que todos mis objetos se creen dentro del método particular (aparte de los valores predeterminados del sistema, que serían comunes), ese método debería ser seguro para subprocesos, ¿no es así? Así, por ejemplo, si tuvieraAsegurando la seguridad del hilo en métodos estáticos En C#
public static class ProcessOrder()
{
public static int GetOrderMaxSize()
{
return (....gets and parses ConfigurationManager.AppSettings["MaxOrderSize"]...);
}
public static bool CreateOrder(Order order)
{
XmlDocument xmlDoc = GetOrderXML(order);
bool check = false;
using (CreateOrderXML.Create xmlCo = new CreateOrderXML.Create())
{
xmlCo.Timeout = 60000;
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
string xmlString = "";
using (StringWriter stringWriter = new StringWriter())
{
using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter))
{
xmlDoc.WriteTo(xmlWriter);
xmlWriter.Flush();
xmlString = stringWriter.GetStringBuilder().ToString();
}
}
byte[] bXMLOrder = encoding.GetBytes(xmlString);
byte[] breturnMessage;
check = xmlCo.Create(bXMLOrder, out breturnMessage);
.... do something with return message
}
return check;
}
private static XmlDocument GetOrderXML(Order order)
{
... creates an XML object for the order
}
}
(el CreateOrderXML es una referencia de servicio a la URL del servicio Web/método) habría que ser flujos seguros, especialmente para los de larga duración (principalmente en el xmlCo.Create (....) etapa) hilos concurrentes? Entiendo que si comencé a incluir miembros en la clase y luego los usé en el método, esto definitivamente generaría un problema con diferentes hilos que sobreescriban los valores, pero siempre que los objetos sean creados dentro de los métodos, deberían estar bien, no deberían ' t ellos?
las variables Sí, a propósito sólo he utilizado "de todo el sistema por defecto" en la propia clase, y paso todo en lo que se requiere para el procesamiento que pueden ser específicas para el usuario/sesión a través de los parámetros del método. Pero todavía tenía zumbidos de advertencia en la parte posterior de mi cabeza, ojalá sean solo "paranoia saludable". –
¡Me suena a paranoia saludable! –