我目前在静态类/方法中有一些代码,但我想检查它是否是线程安全的。从我读到的内容来看,我认为这应该没问题,但我内心深处的某些想法告诉我,这可能不是。我的网页的数据处理阶段使用外部 Web 服务来创建订单记录,这可能会非常慢:可能需要 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 服务 URL/方法的服务引用)这是否是线程安全的,特别是对于长时间运行(主要在 xmlCo.Create(....) 阶段)并发线程?我知道,如果我开始放入类成员,然后在方法中使用它们,这肯定会引入不同线程覆盖值的问题,但只要对象是在方法中创建的,它们应该没问题,应该'他们吗?
您似乎没有访问那里的任何共享数据;您正在请求远程资源,并在每次执行此方法时构建一组唯一的数据。那里不需要同步。
这里方法的每次执行都会创建局部变量——它自己的副本。所以没有任何东西被共享。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)