作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个方法可以生成我编写的完全限定的 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 应该只在您的应用程序的启动事件中被修改,所以这也应该没问题。
关于引用其他类上的静态属性时的 c# 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269743/
我是一名优秀的程序员,十分优秀!