我有一个ASP.NET网站,最近对代码进行了重构以尝试从实际的http请求中删除一些长时间运行的进程(大约一个小时),方法是创建BackgroundWorker并将工作发送到其中进行处理。在缩减测试上运行良好,但当我将逻辑应用于真正的代码时,发现在后台工作器中运行的代码无法访问Session变量。似乎传递的HttpContext对象具有空会话,如果我要求HttpContext.Current,则返回null。
我认为这是因为它们在不同的线程中,而Session和HttpContext.Current都依赖于在相同的线程中。是否有任何方法可以从后台工作程序中访问Session,或者我必须找到所有需要的变量,将它们放入可用的数据结构中,然后在必要时将它们放回Session中(如果适用)?如果需要这样做,显然会使重构变得非常复杂,所以我宁愿不这样做。
感谢您提供的任何想法。除了BackgroundWorker进程(在另一个问题中建议给我的)之外,我也欢迎其他建议。