600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 异步任务 HttpContext.Current为null解决办法

异步任务 HttpContext.Current为null解决办法

时间:2020-01-22 11:11:15

相关推荐

异步任务 HttpContext.Current为null解决办法

最近在开发一个后台管理系统项目,为了提高登录的速度,就把记录登录日志放到一个异步任务里面。

Action taskAction = () =>{SaveLog();};Task task = new Task(taskAction);task.Start();

有一段时间日志记录是正常的,突然有一天就不work了,本地调试也能重现这个错误,是System.Web.HttpContext.Current为null造成的,获取不了当前的用户名。

在网上搜了一下,确实很多用户遇到了,有推荐缓存System.Web.HttpContext.Current的,感觉挺麻烦的。

发现这个Current是可以set的,所以就想把当前线程里面的HttpContext.Current传到日志线程里面。

public static HttpContext Current { get; set; }

Action是个委托,委托是可以+=的,于是就封装了一下。

public class AsyncTaskHelper{/// <summary>/// 异步任务之前,设置HttpContext.Current/// </summary>/// <param name="context"></param>/// <param name="action"></param>public static void StartTask(HttpContext context, Action action){Action newAction = () =>{if (context == null){throw new Exception("请确保HttpContext.Current不为null");}HttpContext.Current = context;};newAction += action;Task task = new Task(newAction);task.Start();}}

调用也很简单

AsyncTaskHelper.StartTask(System.Web.HttpContext.Current, taskAction);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。