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

转载于:https://www.cnblogs.com/lhking/p/10228285.html

最近在开发一个后台管理系统项目,为了提高登录的速度,就把记录登录日志放到一个异步任务里面。Action taskAction = () =&gt;{ SaveLog();};Task task = new Task(taskAction);task.Start();有一段时间日志记录是正常的,突然有一天就不work了,本地调试也能重现这个错误,是...
总结:HttpContext.Current是基于System.Runtime.Remoting.Messaging.CallContext这个类,子线程和异步线程都无法访问到主线程在CallContext中保存的数据。所以在异步执行的过程会就会出现HttpContext.Currentnull的情况。 CallContext是类似于方法调用的线程本地存储区的专用...
问题一:多线程下获取文件绝对路径   当我们使用HttpContext.Current.Server.MapPath(strPath)获取绝对路径时HttpContext.Currentnull,解决办法如下:          /// 获得当前绝对路径         /// 指定的路径         /// 绝对路径 ASP.NET提供了静态属性System.Web.HttpContext.Current,因此获取HttpContext对象就非常方便了。也正是因为这个原因,所以我们经常能见到直接访问System.Web.HttpContext.Current的代码:
HttpContext.Current.Server.MapPath(logFile) 这个是得到具体路径的方法 正常情况下是可以的 多线程情况下就为null 下边的代码原本的作用是把网站的异常错误信息写入log.txt中 这里抽出部分代码是我测试System.Timers.Timer的 把网站的异常错误信息写入log.txt的原代码在这里:http://www.cnblogs...
先在主线程中获取到请求、响应体和session 再在子线程中new一个上下文,将session加入Items字典,Key为“AspSession”,这样在子线程中就能使用HttpContext.Current.Session 代码如下: var request = HttpContext.Current.Request; var respons.. 安装软件报:The installer has encountered an unexpected error installing this package....此类错误... 16333