码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2019-01-06 13:34:43      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:async   ctas   row   help   时间日志   调用   log   缓存   开发   

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

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);

 

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

标签:async   ctas   row   help   时间日志   调用   log   缓存   开发   

原文地址:https://www.cnblogs.com/lhking/p/10228285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!