HttpContext 类及其线程安全

2024-05-01

我有一个辛格尔顿应用程序中的对象具有以下属性:

private AllocationActionsCollection AllocationActions
{
    get
    {
        return HttpContext.Current.Session["AllocationOptions.AllocationActions"] as AllocationActionsCollection;
    }
    set
    {
        HttpContext.Current.Session["AllocationOptions.AllocationActions"] = value;
    }
}

我正在处理一个错误(HttpContext.Current.Session["AllocationOptions.AllocationActions"] 为空即使我认为它总是设置为有效实例......)。我刚刚在 MSDN 上读到HttpContext不保证实例成员是线程安全的!我想知道这是否是问题所在。应用程序中的某个地方可能会发生资源竞争,并且此时HttpContext.Current.Session["AllocationOptions.AllocationActions"] 为空是使用以下语句使用 AllocationActions setter 的时刻:

AllocationActions = new AllocationActionsCollection(Instance.CacheId);

我的问题是:

a)令我震惊的是 HttpContext.Current.Session 不是线程安全的。那么如何安全地使用该财产呢? b) 你知道为什么 Session 变量可以为空吗(尽管我很确定我在第一次使用它之前设置了它)?

谢谢,帕维尔

EDIT 1:

a) 使用以下语句每 2 分钟设置一次初始化会话变量的行(在 Page_Load 中执行)

AllocationActions = new AllocationActionsCollection(Instance.CacheId);

b) 在事件处理程序中调用调用 getter 的代码(如 Button_Click)

c) 应用程序中没有自定义线程。仅常见的 HTTP 处理程序


A 单例对象是通过将类的实例化限制为一个对象来实现的。

HttpContext.Current.Session是专用于单个用户的区域;存储在会话中的任何对象仅对创建它的用户/会话可用。

任何存储在Application仅适用于每个用户/会话。

Any 静态对象此外,仅适用于每个用户/会话。建议实施 http://en.wikipedia.org/wiki/Singleton_pattern总是使用静态对象..为什么不呢?

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

HttpContext 类及其线程安全 的相关文章

随机推荐

  • 带插入符的主成分分析

    我正在使用 Caret 的 PCI 预处理 multinomFit lt train LoanStatus train method multinom std TRUE family binomial metric ROC thresh 0
  • 我如何确定视图在 SwiftUI 中的最后一行代码之前完全渲染?

    我有一些代码 它们必须在视图完全渲染和绘制后被触发 因为我们知道视图的 onAppear 或 onChange 它们对于了解视图是否已出现或正在更改很有用 但它们是确保视图已 100 渲染没有用 例如 如果我们在视图中获得 ForEach
  • CSS @supports (::伪元素)

    我想将区域更改为最大溢出 仅在以下情况下滚动 webkit scrollbar thumb是支持的 在纯 CSS 中这可能吗 看起来 supports只检查规则 不检查选择器 您现在可以使用 supports selector https
  • OCaml 中的线性类型

    Rust http www rust lang org 有一个线性类型系统 有什么 好的 方法可以在 OCaml 中模拟这个吗 例如 当使用 ocaml lua 时 我想确保仅当 Lua 处于特定状态 堆栈顶部的表等 时才调用某些函数 Ed
  • 如何将类成员函数的返回类型设置为私有结构的对象

    很抱歉这个又长又令人困惑的标题 但我想不出更好的方法来问这个问题 所以 我有一堂课 template
  • 读取 filebuf 的等效项?

    typedef struct char c 20 int i header void foo std string s std ifstream ifs s c str std ios base binary std ios base in
  • YouTube 频道名称允许的大小是多少?

    YouTube 频道名称允许的大小是多少 最小长度 最大长度 Google 帐户名称大小限制如下 https developers google com youtube faq login limits https developers g
  • NEXT JS - 应用程序通过重写呈现两次

    我正在开发一个 NEXT JS 项目 但找不到两次渲染应用程序的解决方案 Problem 添加后rewrites to next config js App被渲染两次 如果移除 则渲染一次 next config js async rewr
  • 使用 webpack 动态提供图像

    我有一个关于 webpack 和服务图像的问题 我有一个 webpack 配置 它构建了一个 React webapp 并且还提供来自特定文件夹的 jpg 文件 但是 如果我从我的网络应用程序下载新图像并将其添加到此文件夹中 会发生什么情况
  • 响应式 img/srcset/sizes:不同的 jpg 质量取决于设备像素密度?

    我正在寻找一种响应式图像策略 允许根据设备像素密度提供不同的 jpg 质量 在高分辨率的小屏幕上 我会提供低质量但高分辨率的 jpg 在低像素密度的大屏幕上 我会提供高质量的 jpg 与设备分辨率完美匹配 问题 这是否有可能 img 背景
  • XCode 8.2.1 错误 - 没有这样的模块 YouTubePlayer

    我在用https github com gilesvangruisen Swift YouTube Player https github com gilesvangruisen Swift YouTube Player 首先 我尝试从任何
  • 如何配置 Firefox 在某些链接上运行 emacsclientw?

    我有一个 Perl 脚本 它会在一堆日志文件中查找 有趣 的行 以获取一些有趣的定义 它生成一个 HTML 文件 其中包含一个表 该表的列是时间戳 文件名 行号引用和 有趣 位 我想做的是让文件名 行号成为一个实际的链接 它将在 emacs
  • Neo4j:插入 7k 节点很慢(Spring Data Neo4j / SpringRestGraphDatabase)

    我正在构建一个应用程序 我的用户可以在其中管理字典 其中一项功能是上传文件以初始化或更新词典的内容 我首先关注的结构部分是Dictionary CONTAINS gt Word 从一个空数据库 Neo4j 1 9 4 但也尝试过 2 0 0
  • 如何对多重映射中的键和值进行排序?

    建议使用任何方法对多重映射的键及其值进行排序 例如 输入 5 1 1 9 1 1 5 2 1 2 输出必须是 1 1 1 2 1 9 5 1 5 2 答案是emplace hint 伪代码如下所示 insert with hint M mm
  • 使用 \PDO::ATTR_EMULATE_PREPARES => true 时出现 Laravel 数据不匹配错误

    我们在 Php Laravel 中构建了应用程序 对于数据库我们使用 postgres sql 此外 在 postgres 之上 我们还配置了 pgBouncer 通过管理可供任何应用程序使用的空闲连接池来限制服务器端的最大连接数 现在 我
  • 了解带有位移位的右移运算符

    我很难理解右移运算符 我理解左移 假设我们没有 int n 11 which is 1011 现在如果我们左移它n lt lt 1结果是 int a n lt lt 1 so a 10110 simply add a 0 to the en
  • 在查询中使用别名导致“命令未正确结束”

    我试过这个 SELECT FROM SELECT ROW NUMBER OVER ORDER BY vernum DESC defvern DESC AS RowNumber FROM MyTable INNER JOIN AnotherT
  • 如何释放 (ana)conda 占用的磁盘空间?

    我经常使用 conda 包管理器 到目前为止 我有相当多的环境和大量下载的软件包 占用了我的 SSD 上的大量空间 释放部分空间的一个明显途径是使用以下命令 conda env export gt environment yml from
  • 通过字段名称以编程方式获取 ACF 字段键

    我需要在 WordPress 的高级自定义字段插件 ACF 中按字段名称获取字段键 该字段被分配给一个帖子 我正在帖子的循环中 我想使用字段名称以编程方式获取字段键 这样做的原因是因为我正在创建一个表单 其中字段名称 选项 将保持不变 但在
  • HttpContext 类及其线程安全

    我有一个辛格尔顿应用程序中的对象具有以下属性 private AllocationActionsCollection AllocationActions get return HttpContext Current Session Allo