HttpContext.Current和ConcurrentDictionary

时间:2014-01-20 11:50:58

标签: asp.net .net c#-4.0 concurrency ihttphandler

目前,我们的生产服务器上存在一个非常奇怪的问题。对于查询字符串中的特定参数,我们在其他请求中获取查询字符串的数据。我试图通过在IHttpHandler中使用ConcurrentDictionary的方式来确定是否会导致此行为:

下面是伪代码示例:

public class MyHandler : IHttpHandler
{
        private static ConcurrentDictionary<string, DataObject> _dataCache = new ConcurrentDictionary<string, DataObject>();

        public virtual bool IsReusable
        {
            get { return true; }
        }

        public virtual void ProcessRequest(HttpContext context)
        {
            Func<DataObject> getDataMethod = () =>
            {
                 return DataFactory.GetData(context.Request.QueryString["dataid"].ToLower());
            }

            string cacheKey = HttpUtility.UrlDecode(context.Request.QueryString["dataid"].ToLower());

            DataObject infoItem = _dataCache .GetOrAdd(cacheKey, (key) => { return getDataMethod(); })

            //Other processing code
        }
}

因此,对于“dataid=1”,我会收到“dataid=2”的数据......

执行getDataMethod后,我可以确定它会访问相关的context吗?

0 个答案:

没有答案