.NET String.Format 方法 线程安全问题

   

     碰到这个问题 是在和淘宝做信息交互的时候, 接收别人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的 没有。 为了方便别人查询 更容易聊了嘛  

             反正做开发的 不是掉这坑里,就是还在那个坑里爬着。

      

 

 

原文地址:https://www.cnblogs.com/atliwen/p/4786736.html