Ответ 1
Ток не является статической переменной, его статическое свойство и свойство get - это не что иное, как статический метод, возвращающий текущий контекст.
ASP.NET хранит некоторую информацию с текущим потоком, вы всегда можете получить локальное хранилище потоков для хранения информации, которая является некой статикой только в текущем потоке и которая может быть доступна любым методом только в текущем потоке.
Таким образом, ASP.NET хранит некоторую локальную информацию в потоке, в котором HTTP-контекст выполняет запрошенное приложение и из любого вызова в Current будет извлекать данные локального потока и получать необходимую информацию.
Вы также можете посмотреть атрибут [ThreadStatic]
, который делает вещи почти так же.
Обновление
Из ASP.NET 4.5 и после, Current HttpContext
передается через CallContext
вместо [ThreadStatic]
, поэтому контекст остается доступным через асинхронные вызовы в одном логическом контексте вместо текущего потока, поскольку каждый асинхронный вызов может закончиться на разных потоках.