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

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

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

异步任务,HttpContext.Current为null解决办法相关推荐

  1. Android小米(miui)获取通话记录为null解决办法

    Android小米(miui)获取通话记录为null解决办法 在开发中发现,查询通话记录时使用 contentResolver.query( CallLog.Calls.CONTENT_URI, Co ...

  2. 出现RuntimeWarning: Glyph 39057 missing from current font.的解决办法:

    出现RuntimeWarning: Glyph 39057 missing from current font.的解决办法: 在程序开头添加如下程序: import matplotlib as mpl ...

  3. 异步导致UI句柄增加的解决办法

    在很多操作中,都会使用到异步线程,具体怎样使用在这不说了,网上有很好的说明:本人通过Delegate.BeginInvoke实现异步调用,完成后对UI控件进行设值等,还有System.Timers.T ...

  4. Seconds_Behind_Master= NULL解决办法

    今天在主主从数据库删除600多万数据时发现主从同步失败 show slave status\G; 发现 Seconds_Behind_Master= NULL 原因mysql日志的缓存区太小,io量太 ...

  5. PackagesNotFoundError: The following packages are not available from current channels的解决办法

    解决方法一:将conda-forge添加到搜索路径上 首先,当出现这种报错时,应该首先尝试使用以下命令将conda-forge channel添加到你的channel列表中: conda config ...

  6. Cannot set property 'innerHTML' of null解决办法

    今天写程序的时候出现了Cannot set property 'innerHTML' of null,网上查找了一些资料,原来js是自上而下调用的. 解决办法: 将js放在web页面你要编辑的元素的后 ...

  7. PHP 获取JSON json_decode返回NULL解决办法

    在用json_decode对JSON格式的字符串进行解码时竟然为空,页面空白啊,整半天检查这里检查那里,问同事都没用. 今天必应搜索了下,问题解决了,原来是有BOM头输出,大虾的解决办法如下: 1). ...

  8. Hbase出现ERROR: Can‘t get master address from ZooKeeper; znode data == null解决办法

    问题描述如下: hbase(main):001:0> list TABLE ERROR: Can't get master address from ZooKeeper; znode data ...

  9. HBase错误:ERROR: Can't get master address from ZooKeeper; znode data == null 解决办法

    一.问题背景 使用命令 $ hbase shell 进入hbase的shell之后使用create命令创建表时出现错误:ERROR: Can't get master address from Zoo ...

  10. you need to resolve your current index first 解决办法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 从一个分支A切换到另一个分支B后,对切换后的B分支进行pull操作,因为pull操作实际上包含了fe ...

最新文章

  1. easyui combotree的使用
  2. 汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17
  3. 一张图搞定OAuth2.0
  4. 轻松搭建基于 Serverless 的 ThinkPHP 应用
  5. centos 7 minimal connect: Network is unreachable和ifconfig command not found
  6. EasyUI中tree,Datagrid,pagenation的使用EasyUI中Datagrid和pagenation进行关联时,再次点击pagenation时让表格数据显示的问题
  7. linux中Shell历史命令记录文件的路径是什么
  8. jquery的一个代码
  9. 深度解析:会用Excel,还有必要学Python吗?
  10. 4位无符号比较器设计
  11. 【模板】KMP算法、fail树
  12. swagger api文档_带有Swagger的Spring Rest API –创建文档
  13. LeetCode:Remove Nth Node From End of List 移除链表倒第n项
  14. Win32API 数据基本类型
  15. jenkins修改pom文件_自动化部署—Jenkins+Docker构建工程
  16. 【数据结构笔记32】排序算法概述、简单排序(冒泡排序、插入排序)、逆序对
  17. Crush Crouse 心理学笔记
  18. 汉王考勤管理系统 与服务器连接失败,汉王考勤管理系统
  19. ensp mstp+vrrp配置实验
  20. 批量修改文件夹中所有文件的格式为指定格式

热门文章

  1. 【译】给小白准备的Web架构基础知识
  2. React.js和Vue.js有感—前端开发组件化思想的局部要点理解
  3. [老老实实学WCF] 第五篇 再探通信--ClientBase
  4. CentOS yum 一次性安装所需要的依赖库。
  5. socket与http的区别
  6. 【笔记】如何配置kvm桥接网络
  7. html文章标题加粗,织梦去除推荐文章标题加粗标签的方法
  8. Unable to instantiate application com.honjane.app.MyApplication
  9. 【git体验】git原理及基础
  10. Luogu1091 合唱队形