簡體   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