我有一些代碼,我目前有一個靜態類/方法,但我想檢查它是線程安全的。從我讀過的內容來看,我認爲這應該沒問題,但我腦海中的某些事情卻說它可能不是。我的網頁的數據處理階段使用外部網絡服務來創建訂單記錄,這可能很慢:可能需要30-40秒,可能是5到10分鐘(這不在我的手中),所以我要開火一個返回頁面返回給用戶,然後啓動一個新線程,然後在處理完成後通過電子郵件發送給用戶。這目前處於靜態類/方法中。如果我的所有對象都是在特定方法中創建的(除了系統默認值,這是常見的),那麼該方法應該是線程安全的,不應該。因此,舉例來說,如果我有確保線程安全在靜態方法在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
}
}
(該CreateOrderXML是一個服務參考Web服務URL /法)那會是線程安全的,尤其是對於長時間運行的(主要在xmlCo.Create( ....)階段)併發線程?我明白,如果我開始把類放入類中,然後在方法中使用它們,這肯定會引入一個問題,不同的線程會覆蓋這些值,但只要在方法中創建了對象,它們就應該沒問題,他們?
是的,我已經有意只使用「系統默認」,在類本身的變量,而我通過在一切都需要進行處理,可能是具體到用戶/會話通過方法的參數。但我仍然有警告蜂鳴器在我腦後響起,希望他們只是「健康的偏執狂」。 –
聽起來像對我健康的偏執狂! –