Принципиальный молчун
Зарегистрирован: 19 February 2008
Сообщения: 7
Примеры кода: 0
|
RE: Re: Сохранение static полей класса между запросами |
30 May 2008 16:12 |
|
|
|
|
Andrej-V ХреноРедька
Не гарантируется, что весь запрос от начала и до конца будет обрабатываться одним и тем же потоком. .
Разъясните пожалуйста, для этого надо специально как-то запрограммировать или и без этого может случиться.
ХреноРедька
Для хранения информации в контексте одного запроса надо использовать уже упомянутую здесь коллекцию HttpContext.Items.
[ThreadStatic]- неудачное решение в контексте ASP.NET.
Кто бы спорил. Хочется знать только почему это так?
Да, это может случиться "само собой".
Это называется "thread agility". (google => "asp.net thread agility" - объяснит подробнее).
Дело в том что "внутри себя" весь ASP.NET все равно работает асинхронно, и один и тот же реквест в принципе может обрабатываться разными потоками.
Несмотря на то, что можно кое-как изловчиться и использовать thread-static переменные, я тебе все же рекомендую использовать HttpContext.Items.
В итоге получилось такое более-менее красивое решение:
class Task {
public static Current
{
get {((Task)HttpContext.Current.Items["Task_Current"]);}
set {HttpContext.Current.Items["Task_Current"] = value;}
}
}
|
|