gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:55:47 26 4
gpt4 key购买 nike

我有一个方法可以生成我编写的完全限定的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com