异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)...
在一个项目中,为了系统执行效率更快,把一个经常用到的数据库表通过dataset放到Application中,发现在异步实现中每一次都会出现HttpContext.Current为null的异常,后来在网上查了好多资料,发现问这个问题的人多,回答的少,回答的也多数都是:引用System.Web,不要用HttpContext.Current.Application应该用System.Web.HttpContext.Current.Application,后来在网上看到一篇关于System.Runtime.Remoting.Messaging.CallContext这个类的详细介绍才知道,原来HttpContext.Current是基于System.Runtime.Remoting.Messaging.CallContext这个类,子线程和异步线程都无法访问到主线程在CallContext中保存的数据。所以在异步执行的过程会就会出现HttpContext.Current为null的情况,为了解决子线程能够得到主线程的HttpContext.Current数据,需要在异步前面就把HttpContext.Current用HttpContext的方式存起来,然后能过参数的形式传递进去,下面看看实现的方法:
public HttpContext context
{
get { return HttpContext.Current; }
set { context = value ; }
}
然后建立一个委托
public delegate string delegategetResult(HttpContext context);
下面就是实现过程的编码
{
context = HttpContext.Current;
delegategetResult dgt = testAsync;
IAsyncResult iar = dgt.BeginInvoke(context, null, null);
string result = dgt.EndInvoke(iar);
Response.Write(result);
}
public static string testAsync(HttpContext context)
{
if (context.Application["boolTTS"] == null)
{
Hashtable ht = (Hashtable)context.Application["TTS"];
if (ht == null)
{
ht = new Hashtable();
}
if (ht["A"] == null)
{
ht.Add("A", "A");
}
if (ht["B"] == null)
{
ht.Add("B", "B");
}
context.Application["TTS"] = ht;
}
Hashtable hts = new Hashtable();
hts = (Hashtable)context.Application["TTS"];
if (hts["A"] != null)
{
return "恭喜,中大奖呀";
}
else
{
return "我猜你快中奖了";
}
}
异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)...相关推荐
- 异步 HttpContext.Current 为空null 另一种解决方法
异步 HttpContext.Current 为空null 另一种解决方法 参考文章: (1)异步 HttpContext.Current 为空null 另一种解决方法 (2)https://www. ...
- Java中url传递中文参数取值乱码的解决方法
Java中url传递中文参数取值乱码的解决方法 参考文章: (1)Java中url传递中文参数取值乱码的解决方法 (2)https://www.cnblogs.com/liwenjuan/p/3211 ...
- python权重是什么意思_在python带权重的列表中随机取值的方法
1 random.choice python random模块的choice方法随机选择某个元素 foo = ['a', 'b', 'c', 'd', 'e'] from random import ...
- 循环map取值的方法
[size=large][b] 循环map取值的方法,如下所示:[/b][/size] [b]方法一:[/b] [code="java"]Map<String, String ...
- Jquery操作Cookie取值错误的解决方法
使用JQuery操作cookie时 发生取的值不正确,结果发现cookie有四个不同的属性,分享下错误的原因及解决方法. 使用JQuery操作cookie时 发生取的值不正确的问题: 结果发现coo ...
- HTML给表单元素赋值,JQuery表单元素取值赋值方法总结
一.普通文本框的赋值与取值 1.1.1赋值 jQuery 表单元素取值与赋值方法总结 function get(){ var test1 = $("input.test1").va ...
- 关于matlab中矩阵取值的方法
在matlab中,取出矩阵中某一个值的方法如下: 1.对于二维数组: a(i, j) % 表示取出二维数组a的第 i 行,第 j 列的数据 a(:, j) % 表示取出二维数组a的第 j 列的所有数据 ...
- matlab中矩阵取值的方法
在matlab中,取出矩阵中某一个值的方法如下: 1.对于二维数组: a(i, j) % 表示取出二维数组a的第 i 行,第 j 列的数据 a(:, j) % 表示取出二维数组a的第 j 列的所有数据 ...
- vue 表格中有列需要异步加载_Vue中使用async/await解决异步请求问题
1.async/await场景 用同步的思维来解决异步问题,当前端接口调用需要等到接口返回值以后渲染页面. 2.名词解释 async async的用法,它作为一个关键字放到函数前面,用于表示函数是一个 ...
最新文章
- android资源加载失败,Unity2017,打成安卓包之后加载资源失败
- 【Flask项目2】多进程下的日志文件(2)
- Android AIDL的实现
- java------多线程通信
- Java黑皮书课后题第7章:**7.17(对学生排序)编写一个程序,提示用户输入学生个数、学生姓名和他们的成绩,然后按照学生成绩的降序打印学生的姓名。假定姓名是不包含空格的字符,使用next()读取
- 获取指定包名下的所有类
- elasticsearch 的滚动(scroll)
- mysql一对一修改_MYSQL的一对一
- 关于构造函数和this调用的思考
- ipmitool 设置网关_IPMI 接口配置
- Android开发笔记(一百零三)地图与定位SDK
- mysql的连接池配置文件,数据库连接池/配置文件数据库连接池
- poi(easypoi)导出excel(xls,xlsx)后,文件打开错误或乱码的解决方法(亲测)
- 【转】Tapestry5和Eclipse的整合
- 解决Qt安装后没有桌面图标
- PHP实现文件下载两种方式(a标签和header标签)
- Pascal版2048
- 抓包工具Fiddler下载安装
- GetItemText
- python爬虫抓取头条街拍美女图片