碰到這個問題 是在和淘寶做資訊互動的時候, 接收別人N年前的程式碼。
程式碼邏輯很簡單,就是取得資訊 資料庫查詢 響應請求返回結果。
最近淘寶的人反映說 N多賬戶使用的是一個單號。理論上來說 是應該每次都不一樣的。 最坑爹的是還出現了 資料庫中沒資料 但是響應結果卻有資料了的神奇現象!
反編譯程式碼,整理後發現 邏輯很簡單。
尼瑪 問題找不到怎麼辦???!!
第二個反映就是 可能出現併發了。
一行一行的排查可能出現的併發的地方。 最後發現 String.Format 很有肯能 。 百度後發現 全都是JAVA 中的 String.Format 會出現執行緒安全問題。
.NET 中怎麼樣沒人說過。。。
MSDN上 對 String.Format 沒有說是否是執行緒安全的。 但是說 Sring 是 執行緒安全的! 很容易讓人 覺得 String.Format 是也是執行緒安全的
反編譯 String 類
public static string Format(IFormatProvider provider, string format, params object[] args) { if ((format == null) || (args == null)) { throw new ArgumentNullException((format == null) ? "format" : "args"); } StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8)); builder.AppendFormat(provider, format, args); return builder.ToString(); }
String.Format 內部是呼叫的 StringBuilder 來處理的 字串。
所以 String.Format 是執行緒不安全的。
PS:
之所以發個貼 是為了別人查詢的時候方便點。 搜尋 String.Format 全都是JAVA的 解釋。 .NET的 沒有。 為了方便別人查詢 更容易聊了嘛
反正做開發的 不是掉這坑裡,就是還在那個坑裡爬著。