【问题标题】:Static Methods ok to use when using parameters?使用参数时可以使用静态方法吗?
【发布时间】:2025-12-16 03:55:02
【问题描述】:

我了解静态成员可能会在 ASP.Net 或任何其他基于 .net 的系统中导致多个用户访问和使用相同线程的并发问题。

我的问题是当我将上下文作为参数传递时使用静态方法是否安全。示例:

public class BL
{
    public static List<DocumentType> GetAllActiveDocumentTypesForMyDeparment(int CurrentDepartment)
    {
        return Data.DAL.GetAllActiveDocumentTypesForMyDeparment(CurrentDepartment).Where(s => s.IsActive)
            .OrderBy(s => s.DocumentTypeDisplayName).ToList();
    }
}

以上会导致并发问题吗?请注意,我的 DAL 也在使用静态方法。

我知道有很多关于静态与实例的文章,并且我已经阅读了很多,但我发现真正理解某些东西的最佳方法是编写代码并对其进行测试。谢谢

【问题讨论】:

  • 到目前为止,这个sn-p真的取决于Data.Dal.GetAlLActiveDocumentTypesForMyDepartment是否是线程安全的。
  • 您没有将Data 作为参数传入。所以不,这不是解决方案。

标签: c# asp.net static-methods static-members


【解决方案1】:

我了解静态成员可能会在 ASP.Net 或任何其他基于 .net 的系统中导致多个用户访问和使用相同线程的并发问题。

只有当它修改共享状态或执行某种同步时。

我的问题是当我将上下文作为参数传递时使用静态方法是否安全。

当然。它不像其他线程会看到该参数或有权访问它。当然,您必须在静态方法执行线程安全的工作,但仅此而已。

我建议您回到任何暗示静态成员会导致并发问题的来源,并真正尝试了解何时以及为什么会出现这种情况。这绝对不是一揽子规则,您可以在没有进一步考虑的情况下应用。

【讨论】:

  • 感谢 Jon 的回答(并且非常快。您有回答的模板吗 :-)。无论如何,我的参数是我从 Session State 中读取的,我知道这是每个用户的状态,所以我想我会继续我的实现。