这两天在对项目的发邮件和短信部分异步改造,因为发邮件和短信比较耗时,并且短信供应商的接口有时不太稳定响应非常慢。
但是异步化改造的时候碰到一个非常棘手的问题,异步内部的方法HttpContext.Current为null,因为异步的时候开启了一个新的线程,获取不到原请求线程的上下文信息,当时首先想到的办法是,在异步前将HttpContext.Current保存到变量里边,然后传到异步内部去,但是异步所调用的方法内部有太多地方用到HttpContext.Current,改动量非常大,最后不得不放弃这个方法。
目前我们的项目是使用.net fx4.0,在不升级.net框架版本的情况下,怎么处理可以使改动最少,最好是怎么样使异步线程也能拿到请求线程的上下文信息。
异步使用的是System.Threading.Tasks.Task.Factory.StartNew,代码如下。
c除了参数传递进去,没有其他方法
那就不要改造了
必须要改造,因为现在发短信的接口不稳定,影响到业务了。
@永远的麦子:
想不明白发个短信,为什么方法里面有很多httpcontext.current呢。这么说本身这个方法写的就不好,可以重构了。
这就是开发图方便.维护成坨屎的典范.
除非在action里.其它地方哪能乱去拿上下文.搞不懂这些写代码的人不知道将来自己还要改吗?
赞👍