Является ли этот код безопасным для потоков или почему я беспокоюсь об Url.Helper - PullRequest
2 голосов
/ 16 февраля 2010

Скажи, что у меня есть

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 ]

2 голосов
/ 16 февраля 2010

Да, ваш код является полностью поточно-ориентированным и реентерабельным .

2 голосов
/ 16 февраля 2010

Метод Concat абсолютно потокобезопасен, поскольку не устанавливает никаких переменных. Concat2 также является поточно-ориентированным благодаря тому, как вы его называете. Вы только передаете Model свойства и каждый раз получаете новый экземпляр модели. Единственная проблема может быть в методе SomeThreadSafeMethod, если он устанавливает статические переменные без блокировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...