首页 新闻 会员 周边

项目中发邮件和短信异步化改造碰到的棘手问题(HttpContext.Current为null)

0
[已解决问题] 解决于 2019-05-20 11:07

  这两天在对项目的发邮件和短信部分异步改造,因为发邮件和短信比较耗时,并且短信供应商的接口有时不太稳定响应非常慢。

  但是异步化改造的时候碰到一个非常棘手的问题,异步内部的方法HttpContext.Current为null,因为异步的时候开启了一个新的线程,获取不到原请求线程的上下文信息,当时首先想到的办法是,在异步前将HttpContext.Current保存到变量里边,然后传到异步内部去,但是异步所调用的方法内部有太多地方用到HttpContext.Current,改动量非常大,最后不得不放弃这个方法。

  目前我们的项目是使用.net fx4.0,在不升级.net框架版本的情况下,怎么处理可以使改动最少,最好是怎么样使异步线程也能拿到请求线程的上下文信息。

  异步使用的是System.Threading.Tasks.Task.Factory.StartNew,代码如下。

永远的麦子的主页 永远的麦子 | 初学一级 | 园豆:33
提问于:2016-07-07 12:18
< >
分享
最佳答案
0

c除了参数传递进去,没有其他方法

奖励园豆:5
神牛003 | 小虾三级 |园豆:513 | 2016-07-07 13:45
其他回答(2)
0

那就不要改造了

czd890 | 园豆:14412 (专家六级) | 2016-07-07 13:16

必须要改造,因为现在发短信的接口不稳定,影响到业务了。

支持(0) 反对(0) 永远的麦子 | 园豆:33 (初学一级) | 2016-07-07 13:35

@永远的麦子: 

想不明白发个短信,为什么方法里面有很多httpcontext.current呢。这么说本身这个方法写的就不好,可以重构了。

支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2016-07-07 13:44
1

这就是开发图方便.维护成坨屎的典范.

除非在action里.其它地方哪能乱去拿上下文.搞不懂这些写代码的人不知道将来自己还要改吗?

吴瑞祥 | 园豆:29449 (高人七级) | 2016-07-07 14:50

赞👍

支持(0) 反对(0) jackccc | 园豆:1341 (小虾三级) | 2016-07-08 12:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册