静态方法线程安全

时间:2014-04-03 15:55:50

标签: c# .net asp.net-mvc static thread-safety

让我们说当用户登录我的mvc应用程序时,我会调用以下方法:

public static bool IsValidBrowser()
{
    var browser = HttpContext.Current.Request.Browser;

    if (browser.Browser == "IE") {
        if (browser.MajorVersion < 10) {
            return false;
        }
    }
    return true;
}

这个方法线程安全吗?显然我没有在这里修改任何内容,但是HttpContext.Current可能会在此方法的中间发生变化吗?

以这种方式编写代码会使线程安全吗?

public ActionResult Login () 
{
    bool validBrowser = IsValidBrowser(HttpContext.Current.Request.Browser);
}

public static bool IsValidBrowser(HttpBrowserCapabilities browser)
{
    if (browser.Browser == "IE") {
        if (browser.MajorVersion < 10) {
            return false;
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:7)

HttpContext.Current本身是一个静态方法,它将从当前线程返回上下文,因此您无需担心。

答案 1 :(得分:0)

  

此方法线程安全吗?

是的,如@DoctorMick所述,此方法是线程安全的。再加一点。

  

Microsoft的   框架类库(FCL)保证所有静态方法都是线程安全的。   FCL必须这样做   在内部,因为不可能有多个公司生产不同的组件   协调单个锁以仲裁对资源的访问。

因此,如果您使用FCL静态方法,则无需考虑线程安全性。例如(控制台类,数学类等)