分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

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

发布时间:2023-09-06 02:29责任编辑:彭小芳关键词:暂无标签

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

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解决办法

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved