asp.net – System.Web.HttpContext.Current在检查Cache后自动为
发布时间:2020-12-16 06:59:29 所属栏目:asp.Net 来源:网络整理
导读:我今天遇到了一个奇怪的问题,对我来说毫无意义.以下是摘要: 在方法内部,我检查一个缓存的项目如下: private async TaskRatesStatus getRatesStatusAsync() { //... if (_currentHttpContext != null) { //Here,I am checking for a Cached item var cached
我今天遇到了一个奇怪的问题,对我来说毫无意义.以下是摘要:
在方法内部,我检查一个缓存的项目如下: private async Task<RatesStatus> getRatesStatusAsync() { //... if (_currentHttpContext != null) { //Here,I am checking for a Cached item var cachedRatesStatusObj = HttpContext.Current.Cache[Constants.RATESSTATUS_CACHE_KEY_NAME]; if (cachedRatesStatusObj != null) return (RatesStatus)cachedRatesStatusObj; } //... cacheRatesStatusObject(ratesStatus); //... } 这里,HttpContext.Current在ASP.NET应用程序中不是预期的.然后,在cacheRatesStatusObject方法中,我检查HttpContext.Current是否为null,如下所示: private void cacheRatesStatusObject(RatesStatus ratesStatus) { //... //Seeing if HttpContext.Current is null or not first. //and it is null here... if (HttpContext.Current == null) return; //... } 它在那里是空的.不知道这里发生了什么.有什么想法吗? 解决方法
当您使用async / await时,处理请求的线程将请求标记为不完整,然后返回到ASP.NET线程池.当awaitable稍后完成时,会分配另一个线程来运行方法的其余部分,但HttpContext不会跨线程迁移,这就是调用await方法时获得null引用的原因.
您可以将HttpContext的引用传递给await方法,如下所示: await cacheRatesStatusObject(HttpContext.Current,ratesStatus); 但是,您应该非常小心处理并发和竞争条件,例如,如果await线程锁定资源而另一个请求线程尝试使用它,那么您的线程池就会蓬勃发展.大多数人通过创建新对象并将它们传递到参数化线程来解决这个问题,而不是跨线程传递HttpContext的引用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在ASP.Net MVC中将JSON转换为C#类
- asp.net – 为什么我的StreamWriter响应输出在Excel中产生垃
- 获取在asp.net中单击错误页面的页面的URL
- asp-classic – 对经典asp中的asp页面进行更改是否需要iisr
- asp.net 工具
- asp.net – 在webapi中实现PATCH
- asp.net – 在AJAX方法调用中的RegisterClientScriptBlock
- asp.net – 如何使用Twitter作为网站登录
- asp.net-mvc – DI ninject为控制器而不是视图模型工作
- asp.net-mvc – 如何在MVC中排除此syntext中的另一个属性[B
推荐文章
站长推荐
热点阅读