[英]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.