Может ли кеш (или другие переменные) изменяться во время выполнения кода? - PullRequest
5 голосов
/ 28 февраля 2011

Это может быть просто теоретический вопрос, но я не смог найти удовлетворительного ответа на него.

Я использую кеш на одном из моих сайтов, который заставляет меня задуматься о том, что это за данные и когда и если они изменятся. Может ли кеш меняться при выполнении какого-либо кода?

Вот пример

if (Cache["name"] != null) {

    // Long and heavy code execution done here

    if (Cache["name"] == null) Response.Write("Lost the data");
}

Может ли процесс, изменяющий кэш, выполняться параллельно с приведенным выше кодом или он ожидает завершения работы?
Есть ли теоретический шанс, что это напечатало бы «Потерянные данные»?

Если да, всегда ли рекомендуется сначала сохранить переменную или , всегда проверять наличие null и никогда not null ?

Заранее спасибо!

/ Никлас

Ответы [ 2 ]

4 голосов
/ 28 февраля 2011

Абсолютно возможно.

Всегда снимайте значения из кэша и работайте со снимком:

var snapshot = Cache["name"];
if(snapshot != null) {...}

и используйте snapshot повсюду.Когда дело доходит до многопоточности, вышеупомянутое обычно разумный подход;единственное предостережение в том, что вы можете захотеть взглянуть на Interlocked для ряда методов, которые позволяют (безопасно) увидеть, изменилась ли переменная / поле, пока вы не искали, и применить только то изменение, которое не изменилось.

0 голосов
/ 28 февраля 2011

Срок действия может истечь, поэтому перед его использованием следует проверить нулевое значение.И, как вы сказали, сохранение сохраненной копии для работы - это хорошо.

...