gpt4 book ai didi

asp.net - 无法将AspNetSynchronizationContext传播到TPL任务

转载 作者:行者123 更新时间:2023-12-03 13:20:45 25 4
gpt4 key购买 nike

我读过许多文章,为了保留HttpContext.Current在4.5之前的版本中,我们应该继续处理线程的SynchornizationContext。
这是我尝试执行的代码:

TaskScheduler taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() => HandleInquiry(currentInquiry, request),
CancellationToken.None,
TaskCreationOptions.None,
taskScheduler)

当我调试此代码时,可以在任务计划之前确认taskScheduler包含AspNetSynchronizationContext。但是,在HandleInquiry方法内部(在Task内部),SynchronizationContext.Current为null,而HttpContext.Current也为null。我确信我缺少明显的东西。

最佳答案

在后台任务中访问HttpContext是一个糟糕的设计。正确的方法是仅传递所需的信息作为参数。但是,如果您依赖一些无法在此阶段修改的遗留且编写错误的代码,则可以将整个HttpContext作为参数传递,并在任务内重新分配它:

Task.Factory.StartNew(
state =>
{
System.Web.HttpContext.Current = (HttpContext)state;
HandleInquiry(currentInquiry, request);
},
System.Web.HttpContext.Current
);

关于asp.net - 无法将AspNetSynchronizationContext传播到TPL任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com