Потоки и статические методы в C # - PullRequest
12 голосов
/ 28 июня 2010

Вот бессмысленный метод расширения в качестве примера:

public static class MyExtensions
{
    public static int MyExtensionMethod(this MyType e)
    {
        int x = 1;
        x = 2;

        return x
    }
}

Скажем, поток выполнения завершается и включает в себя строку:

x = 2; 

Затем процессор переключает контекст и другойпоток входит в тот же метод и завершает строку:

int x = 1;

Правильно ли я считаю, что переменная "x", созданная и назначенная первым потоком, находится в отдельном стеке для переменной "x", созданнойназначается вторым, что означает, что этот метод является повторным?

Ответы [ 3 ]

14 голосов
/ 28 июня 2010

Да, каждый поток получает свою собственную локальную переменную.Эта функция всегда возвращает 2, даже если она вызывается несколькими потоками одновременно.

2 голосов
/ 28 июня 2010

Да, это правильная оценка. x - это локальная переменная метода, которая не будет использоваться совместно для вызовов MyExtensionMethod.

0 голосов
/ 28 июня 2010

Проще говоря, да.Статический метод только означает, что метод может быть вызван без объекта.Локальные переменные в методе все еще являются локальными.

...