Потоки и статические методы в C#
Вот бессмысленный метод расширения в качестве примера:
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 ответа
Да, каждый поток получает свою собственную локальную переменную. Эта функция всегда будет возвращать 2, даже если она вызывается несколькими потоками одновременно.
Да, это правильная оценка. x
является локальной переменной метода, и не будет разделяться между вызовами MyExtensionMethod
,
Проще говоря, да. Статический метод только означает, что метод может быть вызван без объекта. Локальные переменные в методе все еще являются локальными.