C# 静态方法在web开发中是安全的吗?

C# 静态方法在web开发中是安全的吗?,c#,asp.net,C#,Asp.net,我使用过静态的“helper”方法&看到其他人使用它们。但它们在多线程环境(如网站)中是否安全?静态方法不总是容易受到多线程同时进入并导致问题的影响吗 你什么时候使用它们?是的,它们是安全的 没有副作用的“纯功能”就是一个例子。是的,它们非常安全。ASP.NET本身有很多静态方法的例子。是一个只包含静态方法的完整类(除了从System.Object继承的方法) 要查找的最大危险标志是修改共享资源(例如静态属性和/或字段)的静态代码。您可以执行此类更新并安全地对其进行编码,但每当您看到修改共享资源

我使用过静态的“helper”方法&看到其他人使用它们。但它们在多线程环境(如网站)中是否安全?静态方法不总是容易受到多线程同时进入并导致问题的影响吗

你什么时候使用它们?

是的,它们是安全的


没有副作用的“纯功能”就是一个例子。

是的,它们非常安全。ASP.NET本身有很多静态方法的例子。是一个只包含静态方法的完整类(除了从
System.Object
继承的方法)

要查找的最大危险标志是修改共享资源(例如静态属性和/或字段)的静态代码。您可以执行此类更新并安全地对其进行编码,但每当您看到修改共享资源的代码时,都会导致您暂停并验证其是否正确完成。

我使用:

  • 从中的
    Application\u Start
    Application\u End
    方法调用的静态启动和关闭方法:
    • 对于构造静态数据,这些方法比静态构造函数更安全(单线程)
    • 但是要注意全局的其他静态方法,例如,
      Session\u Start
      Application\u Error
      ,它们可能无法序列化
  • 用于定义扩展方法的静态类
  • 没有副作用的静态方法(处理其输入参数并返回结果,而不修改全局/静态数据)
  • 显式线程安全的静态函数,例如,因为它们在实现中使用
    lock

这取决于代码的功能<例如,代码>公共静态int giveMeanNumber(){return 43;}在多线程场景中不会出现问题。多个线程运行相同的方法没有问题。你需要关注共享的可变状态,比如静态字段。看看这一点,每个类和每个可执行变量都是不安全的。FWIW:我已经在适当的上下文中删除了DI单例的所有静态类(除了IoC设置)。这并不比静态类本身更安全(同样,引起问题的是可变状态),但它确实使处理上下文、依赖关系和测试更容易,如果输入的状态在处理过程中发生更改,则可能是该方法的问题。输入参数通常由调用静态方法的线程所有。通常为true,但这是需要注意的。@MrSmith可能是这样的:如果缓存是全局数据,可以通过调用静态方法的多个线程来更新,那么必须保护对该全局数据的访问(例如使用锁),或者必须使用需要注意的.t的any/all静态数据之一来实现全局数据(静态方法是无害的):尤其是对静态数据的任何写入或创建。