繁体   English   中英

c#引用其他类的静态属性时的线程安全性

[英]c# thread safety when referencing static properties on other classes

我有一种方法来生成我写的完全限定的URL,我希望它具有静态,因此可以根据需要轻松地从模型中调用。

我仍然遇到问题,但是能否决定它的线程是否安全。

这是代码。

    public string GenerateURLFromModel(string action, string controller)
    {
        HttpContextWrapper wrapper = new HttpContextWrapper(HttpContext.Current);
        Uri url = HttpContext.Current.Request.Url;
        UrlHelper urlHelper = new UrlHelper(new RequestContext(wrapper, RouteTable.Routes.GetRouteData(wrapper)));

        return url.AbsoluteUri.Replace(url.PathAndQuery, urlHelper.Action(action, controller));
    }

我所知道的是:

1)传入的两个字符串将是线程安全的,因为它们是不可变的引用类型。

2)在静态方法中实例化的所有对象都可以被认为是线程安全的,因为它们仅存在于该特定线程的堆栈中。

我不确定的是:

1)如何在此方法中使用HttpContext.Current和RouteTable.Routes? 它们都是我传递给构造函数的静态属性。

我的问题是:

1)使用这些静态属性有什么含义?

2)我对这种方法的安全性的其余理解是否正确?

3)将来我可以记住哪些规则来帮助确定这种情况下的线程安全性?

只要您不修改共享状态,或访问可能被其他线程修改的状态,那么您就可以了。

在这种情况下,HttpContext.Current无论如何都是当前线程的本地,所以这不是问题; 和RouteTable.Routes只应在应用程序的启动事件中修改,因此也应该没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM