2010-03-13 4 views
17

Normalement, j'ai une classe statique qui lit et écrit à HttpContext.Current.CacheAccès au cache ASP.NET à partir d'un thread séparé?

Cependant, depuis l'ajout de filetage à mon projet, les fils toutes les exceptions de référence obtiennent null lorsque vous essayez de récupérer cet objet.

Existe-t-il un autre moyen d'y accéder, des solutions de contournement ou un autre cache que je peux utiliser?

+2

Il n'est pas sûr pour les threads. Découvrez le mot clé lock dans votre livre de programmation C# préféré. –

+0

Que voulez-vous dire par "depuis l'ajout du filetage"? –

+0

@nobugz: 'System.Web.Caching.Cache' ** est ** thread-safe. Pas de "verrou" nécessaire ici. – Aaronaught

Répondre

2

Si votre projet est un projet ASP.NET, il a été multithread avant même que vous ayez "ajouté le thread".

Vérifiez si HttpContext.Current est non nul avant de référencer HttpContext.Current.Cache.

En outre, veuillez publier l'exception complète que vous recevez, et montrez-nous le code qui référence le cache.

36

L'objet System.Web.Cache est lui-même thread-safe.

Le problème est de savoir comment obtenir une référence à celle-ci d'une manière qui fonctionne dans toute votre application. HttpContext.Current renvoie null à moins qu'il ne soit appelé sur un thread qui gère une demande ASP.NET. Une autre façon d'obtenir le Cache passe par la propriété statique System.Web.HttpRuntime.Cache. Cela permettra d'éviter les problèmes avec le HttpContext.

+3

HttpRuntime.Cache est la bonne réponse. – Chris

+0

Oh cool, je ne sais pas comment je ne suis jamais tombé sur HttpRuntime ... +1, en supprimant ma réponse. :) – Tanzelax

+1

+1: C'est la bonne réponse. Voici quelques détails: http://weblogs.asp.net/pjohnson/archive/2006/02/06/437559.aspx –

Questions connexes