静态方法在使用参数时可以使用吗?

时间:2013-10-16 08:25:51

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

据我所知,静态成员可能会导致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也使用静态方法。

我知道有很多关于Static vs Instance的文章,我已经阅读了很多文章,但我发现真正理解某些东西的最好方法是编写代码并测试它。感谢

1 个答案:

答案 0 :(得分:4)

  

据我所知,静态成员可能会导致ASP.Net或任何其他基于.net的系统出现并发问题,多个用户将访问并使用相同的线程。

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

  

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

不确定。它不像其他线程会看到该参数或有权访问它。当然,你必须在静态方法中执行线程安全的工作,但就是这样。

我建议你回到建议静态成员引起并发问题的任何来源,并且真正尝试理解何时以及为什么会出现这种情况。如果没有进一步考虑,这绝对不是一揽子规则。