检查缓存后 System.Web.HttpContext.Current 自身为空

2024-05-20

今天我遇到了一个奇怪的问题,这对我来说毫无意义。总结如下:

在方法内部,我检查缓存的项目,如下所示:

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 应用程序中所期望的那样,不为 null。然后,在里面cacheRatesStatusObject方法,我检查是否HttpContext.Current为空或不如下:

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 thread pool。当等待稍后完成时,会分配另一个线程来运行该方法的其余部分,但是 HttpContext 不会跨线程迁移,这就是为什么在调用等待方法时会得到空引用。

您可以将 HttpContext 的引用传递给await 方法,如下所示:

await cacheRatesStatusObject(HttpContext.Current,  ratesStatus);

但是,您应该非常小心地处理并发和竞争条件,例如,如果等待线程锁定资源并且另一个请求线程尝试使用它,那么您的线程池就会繁荣。大多数人通过创建新对象并将它们传递到参数化线程中来解决此问题,而不是跨线程传递 HttpContext 的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查缓存后 System.Web.HttpContext.Current 自身为空 的相关文章

  • 你可以推荐什么 JavaScript 缓存 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个好的javascript内存缓存库来缓存客户端计算结果 我的要求 适用于 Internet Explorer FireFox
  • memcache、redis 和 ehcache 作为分布式缓存框架的比较 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要做出的决定之一是在我的系统中使用什么缓存框架 有这么多可供选择 我目前正在研究 redis ehcache 和 memcached
  • Windows Workflow Foundation 的替代方案?

    我已经使用 WWF 一段时间作为内部呼叫中心应用程序 ASP NET 的一部分 在学习过程中 这是了解基于状态机的工作流系统如何工作的良好实践should工作 我绝对不爱WWF本身 我认为是 过于复杂 尤其是在网络应用程序中使用 所有线程运
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参
  • 连接尝试失败,因为连接方未正确响应

    我在 1and1 上有一个共享服务器 在我的 MVC 站点中 当我尝试连接到外部的另一台服务器时 出现以下错误 发送请求时发生错误 无法连接到 远程服务器连接尝试失败 因为连接方 一段时间后没有正确回应 或建立 连接失败 因为连接的主机未能
  • JQuery:获取 ASP.NET CheckBoxList 控件中复选框的值/文本/innerHtml

    我有一堆由 asp net CheckBoxList 控件生成的复选框 我想获取用户在页面上的控件旁边看到的文本 对于类似的控件 例如 RadioButtonList 我可以通过执行以下操作在 jQuery 中获取它们的值 var sele
  • 当我想要发布项目时:“指定的路径、文件名或两者都太长”

    当我想运行或发布网络项目时 我收到此错误 严重性代码 说明 项目文件行抑制状态 错误 无法评估项目元数据 FullPath 项目元数据 FullPath 无法应用于路径 jquery ui 1 10 3 custom development
  • 从另一个项目/dll 引用的 Asp.NET 用户控件具有 NULL 属性

    试图将一个常用的自定义控件移到一个新的类库中 也尝试了一个新的web项目 以便其他项目可以使用它 但是在另一个项目中使用时它的属性始终为NULL 不幸的是 搜索类似的问题并不能帮助解决我的问题 我将 web base config 中的新控
  • 每次使用会话来获取/设置对象属性

    我尝试搜索这个 但我什至不知道如何用它来搜索 我试图做的是有一个类 每次我访问它来更改它时 我实际上都是从会话中获取和设置值 这是我正在尝试做的事情 到目前为止我所做的事情 public class example public int p
  • 访问 Asp.Net Core 应用程序中的 Web.config 设置?

    据我所知 asp net core 有一个新的配置系统 非常灵活 非常棒 但我喜欢 net 4 x 中基于 web config 的配置系统 例如 可以在 web config 文件中添加注释 因为它是一个 xml 文件 对我来说 值得坚持
  • “通用”电话号码的基本正则表达式

    我需要一个正则表达式 用于 ASP NET 网站 来验证电话号码 它应该是灵活的 唯一的限制是 应至少为 9 位数字 没有字母 可以包含空格 连字符 单个 我搜索过 SO 和 Regexlib com 但我得到的表达式有更多限制 例如英国电
  • 咖啡因与番石榴缓存

    根据这些微观基准 https github com ben manes caffeine wiki Benchmarks事实证明Caffeine https static javadoc io com github ben manes ca
  • 检查Cookie是否存在

    从快速搜索开始堆栈溢出我看到有人建议使用以下方法来检查 cookie 是否存在 HttpContext Current Response Cookies cookie name null 或 在一个Page class this Respo
  • 无法使用 Javascript 重定向到另一个页面

    在 html 文件中使用 Javascript 重定向页面 我这样使用 window location href http www google com 它工作正常 但是当我在 aspx 中尝试时它不起作用 下面是我的代码 提前致谢
  • index.g.cshtml 在哪里

    我正在尝试完成本教程 但是 通常 当我构建解决方案时 我会得到一个CS0234错误指出文件中缺少命名空间Index g cshtml cd 但是这个文件存在于哪里呢 我努力了 所有构建 清理 重建解决方案选项 我已重新启动 Visual S
  • 路径访问被拒绝 VS 2017 无法复制文件

    最近 Visual Studio 遇到了最奇怪的问题 我正在运行 2017 年 我有一个与同事合作了一段时间的存储库 有一天我突然尝试构建 但遇到了一些错误 内容如下 访问路径 function json 被拒绝 然后 在多次尝试构建和清理
  • 使用 SendMessage 通过电子邮件发送文件附件而不保存文件

    我可以发送电子邮件和所有内容 但无法创建有效的 Attachment 放入我的电子邮件中 我在网上找到的所有示例都假设它以某种方式保存在我的计算机本地并通过路径链接它 但事实并非如此 在我的方法中 我使用 Winnovative 创建文件
  • IIS 7 错误:无法执行程序。正在执行的命令是 csc.exe(ApplicationPoolIdentity 默认设置)

    这是我的第一个问题 如果我有一些语法错误 请向我道歉 问题描述 我在多台服务器上安装了运行在 IIS 7 Windows Server 2008 和 SQL Server 2008 R2 上的基于 32 位 MVC 5 的 CRUD 系统
  • asp.net mvc 它能处理所有请求吗? - iis 7集成模式

    我有一个使用 asp net mvc 构建的网站 在 IIS 7 上使用集成模式运行 我注意到 当我输入 mysite com test html 时 我得到了 The IControllerFactory did not return a
  • 如何为客户端和服务器缓存设置不同的缓存过期时间

    我想让某些页面为客户端提供 10 分钟缓存 为服务器提供 24 小时缓存 原因是如果页面发生变化 客户端将在 10 分钟内获取更新版本 但如果没有任何变化 服务器只需每天重建一次页面 问题在于输出缓存设置似乎覆盖了客户端设置 这是我的设置

随机推荐

  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 迭代打印列表中的每个整数

    假设我有一个整数列表l 1 2 我想打印到stdout Doing print l产生 1 2 假设我想打印不带大括号的列表 map print l产生 No instance for Show IO arising from a use
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • 为什么需要重置浏览器?

    好吧 我知道这可能不是最好的标题why我们需要重置浏览器 因为浏览器有不同的默认设置 我的问题太长 无法放入标题中 如果每个人 90 的时间都需要使用重置样式表 为什么浏览器需要设置默认样式 无论如何我们都会删除它们 对吗 因为某些规则默认
  • Deploytool for MATLAB R2013b 不起作用,发生了什么变化?

    多年来我一直在使用集成deploytool为我的同事创建易于分发的 exe 文件 我几天前安装了R2013b 但无法使用deploytool不再了 尝试打包时的日志文件给出了以下内容 ant
  • 如何从 JWT 令牌中提取声明

    我正在使用 dgrijalva jwt go 包 我想从令牌中提取有效负载 但找不到方法 示例 取自 https jwt io https jwt io 对于编码 eyJhbGciOiJIUZI1NiIsInR5cCI6IkpXVCJ9 e
  • 如何在 Ubuntu 16.04 上的 Python 3 / Matplotlib 2 中安装底图?

    I tried pip3 install basemap but Basemap https sourceforge net projects matplotlib files matplotlib toolkits 好像不在 PyPI 上
  • 使用 pyparsing 解析表达式列表

    我正在尝试使用 pyparsing 来解析简单的基本程序 import pyparsing as pp pp ParserElement setDefaultWhitespaceChars t EOL pp LineEnd suppress
  • 如何在 Microsoft Azure Function 中创建类?

    可能这是一个错误的问题 但我需要创建一个模型 类并在天蓝色函数中访问相同的模型 类 我无法找到如何创建课程 类可以内联创建 因为它通常会在常规 C 项目中定义类 这是一个例子 https github com Azure azure web
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • 模块参数权限

    我是内核编程的新手 当我正在经历module param 我对权限值 0 感到困惑 有人解释说它不会在 sysfs 中获得条目 而其他人则喜欢S IRUGO将获得一个条目 我无法理解这个概念 perm 值 0 表示什么 我们什么时候需要 s
  • 如何防止布局的方向改变,而不是整个屏幕/活动的方向改变

    我需要一个子布局 可以是任何布局 例如FrameLayout or RelativeLayout 忽略方向变化并始终保持横向 但不是它的父级或任何其他兄弟布局 视图 它们应该相应地改变它们的方向 因此 我不能使用setRequestedOr
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何将此 HTML 表格布局解决方案转换为浮动 div 解决方案?

    我经常需要列出各种尺寸的项目images在左边和text在右边 像这样 替代文本 http www deviantsart com upload 7s01l5 png http www deviantsart com upload 7s01
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • finish() 完成活动但它仍然在后台

    我有一个关于 android studio 中活动的 finish 方法的问题 我有这个简单的代码 public class MainActivity extends AppCompatActivity Override protected
  • 合并两个(或更多)PDF

    背景 我需要为我的销售人员提供每周报告包 该包包含几个 5 10 个水晶报告 Problem 我想允许用户运行所有报告并且只运行单个报告 我想我可以通过创建报告然后执行以下操作来做到这一点 List
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 检查缓存后 System.Web.HttpContext.Current 自身为空

    今天我遇到了一个奇怪的问题 这对我来说毫无意义 总结如下 在方法内部 我检查缓存的项目 如下所示 private async Task