这个代码线程是安全的还是为什么我关心Url.Helper

时间:2010-02-16 09:17:06

标签: c# .net asp.net-mvc multithreading thread-safety

说我有

public static class M
{
    public static string Concat(string a, string b)
    {
        return N.AddOne(a, b);
    }
    public static string Concat2(string a, string b)
    {
        return SomeThreadSafeMethod(a, b);
    }
}

public static class N
{
 public static string AddOne(string a, string b)
    {
        return a+b+1;
    }
}

M.Concat是线程安全的操作吗? M.Concat2怎么样? SomeThreadSafeMethod是否可以在多线程上下文中使用不同的a或b进行调用?

我问这个问题的原因是我希望更好地了解C#如何处理线程,尤其是 对于M.Concat2案件。

其次我正在使用Asp.net MVC,我担心当我使用带变量的路由调用Html.ActionLink或RouteLink时 一些简单的东西,如

Html.ActionLink("Test", "Index", "Test", new { Model.Id, Model.State})

当多个用户点击同一页面时,每个用户将获得不同的状态。如果它不是线程安全的话,那么我可能会回到与预期不同的路线。

2 个答案:

答案 0 :(得分:2)

Concat方法绝对是线程安全的,因为它没有设置任何变量。由于您调用它的方式,Concat2也是线程安全的。您只传递Model属性,并且每次都会获得不同的模型实例。唯一的问题可能是SomeThreadSafeMethod方法,如果它设置静态变量而不锁定。

答案 1 :(得分:2)

是的,您的代码完全是线程安全的reentrant