Такой механизм полезен во многих ситуациях. Чаще всего его применяют для возврата в кэш текущих данных по истечении срока их действия, а также для восстановления в кэше прежних данных, если источник, используемый для заполнения кэша, окажется недоступным.

В своем примере я просто 'нпирую текущее время и всякий •• . когда срок действия                                      данных истекает, добавляю к концу строки


в кэше звездочку. Через некоторое время, подсчитав звездочки, вы легко определите, сколько раз истекал срок действия кэшированных данных. Код на рис. 7 демонстрирует важную концепцию обратных вызовов и яв­ляется шаблоном, на основе которого можно создавать более функцио­нальные процедуры обратного вызова в реальных приложениях.


Важно отметить, что обработчик Page l.oail на рис. 7 определяет, надо ли использовать кэшированные данные,'по шаблону. Рекомендуется всегда применять такой шаблон при работе с элементами в кэше. Здесь с помо­щью оператора if текущее содержимое кэша проверяется на null (ключ кэшнрованных данных лучше хранить в переменной, поскольку вы буде­те неоднократно ссылаться на него). Если содержимое соответствует null, вы должны получить данные из источника и поместить в кэш; в ином слу­чае возвращайте данные из кэша. Если для доступа к данным применяет­ся очень сложная логика, вынесите этот оператор if в отдельную функцию.

На самом деле функциональность объекта Cache куда шире, чем я мог здесь рассказать. Это один из самых мощных объектов в ASP.NET, и я на­стоятельно советую детально разобраться в нем.

Объект Context

Объект Context хранит данные, специфичные для отдельного запроса кон- кретного пользователя. Эти данные существуют в течение срока жизни запроса. Контейнер Context способен хранить значительные объемы дан- но этой возможностью обычно не                                                  поскольку для каждо-

го запроса часто создается новый экземпляр этого объекта посредством обработчика, определенного в global.asax.