代码之家  ›  专栏  ›  技术社区  ›  TalkingCode

C#:如果从多个线程调用静态方法怎么办?

  •  81
  • TalkingCode  · 技术社区  · 15 年前

    在我的应用程序中,我有一个从多个线程同时调用的静态方法。我的数据有被混淆的危险吗?

    在我的第一次尝试中,这个方法不是静态的,我正在创建这个类的多个实例。在那种情况下,我的数据不知怎么搞混了。我不知道这是怎么发生的,因为这只是偶尔发生的。我还在调试。 但是现在这个方法是静态的,到目前为止我没有问题。也许这只是运气。我不确定。

    4 回复  |  直到 7 年前
        1
  •  107
  •   Marc Gravell    15 年前

    在方法中声明的变量(可能的例外是“ 捕获 “变量)是孤立的,因此您不会遇到任何固有的问题;但是,如果您的静态方法访问任何共享状态,则所有赌注都将被取消。

    共享状态的示例如下:

    • 静态场
    • 从公共缓存访问的对象(非序列化)

    如果您有共享状态,则必须:

    • 注意一旦状态可以共享,就不要改变它(更好的方法是:使用不可变的对象来表示状态,并将状态的快照放到局部变量中,也就是说,不要引用 whatever.SomeData 你反复地读 随便什么。一些数据 一旦 输入一个局部变量,然后只使用变量-注意,这只对不可变状态有帮助!)
        2
  •  29
  •   Guffa    15 年前

    是的,只是运气而已

    不管方法是否静态,重要的是数据是否静态。

    当单独实例中的数据仍然混淆时,很可能是因为数据并不是真正分开的。

        3
  •  17
  •   Doug Ferguson    15 年前

    静态方法应该适合多线程。

        4
  •  11
  •   Marcote    15 年前

    MSDN总是说:

    编辑: 正如这里的人所说,情况并非总是如此,显然这适用于在BCL中以这种方式设计的类,而不是不适用于用户创建的类。