我有一些代码目前在静态类/方法中,但我想确认它是否是线程安全的。从我所读的内容来看,我认为这应该没问题,但我脑海中的某些东西说它可能不是。我的网页数据处理阶段使用外部网络服务创建订单记录,这可能会很慢:可能需要30-40秒,也可能需要5到10分钟(这超出了我的控制范围),因此我将返回一个页面给用户,然后启动一个新线程,等处理完成后再向用户发送电子邮件。这目前在静态类/方法中。只要我的所有对象都在特定方法内创建(除了系统默认值,这将是共同的),那么该方法应该是线程安全的,对吗?例如,如果我有
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
}
}
(CreateOrderXML是指向Web Service URL/method的服务引用)对于长时间运行的并发线程,特别是在xmlCo.Create(...)阶段,这会是线程安全的吗?我知道如果我开始在类成员中放置对象并在方法中使用它们,这肯定会导致不同线程覆盖值的问题,但只要对象在方法内创建,它们应该没问题,对吗?