让我们说当用户登录我的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;
}
答案 0 :(得分:7)
HttpContext.Current本身是一个静态方法,它将从当前线程返回上下文,因此您无需担心。
答案 1 :(得分:0)
此方法线程安全吗?
是的,如@DoctorMick所述,此方法是线程安全的。再加一点。
Microsoft的 框架类库(FCL)保证所有静态方法都是线程安全的。 FCL必须这样做 在内部,因为不可能有多个公司生产不同的组件 协调单个锁以仲裁对资源的访问。
因此,如果您使用FCL静态方法,则无需考虑线程安全性。例如(控制台类,数学类等)