【发布时间】:2013-01-26 19:41:44
【问题描述】:
我已经阅读了许多文章,为了在 4.5 之前的版本中保留 HttpContext.Current,我们应该传递处理线程的 SynchornizationContext。
这是我正在尝试执行的代码:
TaskScheduler taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() => HandleInquiry(currentInquiry, request),
CancellationToken.None,
TaskCreationOptions.None,
taskScheduler)
当我通过这段代码进行调试时,我可以在任务调度之前确认 taskScheduler 包含 AspNetSynchronizationContext。但是,在 HandleInquiry 方法内(在任务内), SynchronizationContext.Current 为空,而 HttpContext.Current 也为空。我确定我遗漏了一些明显的东西。
【问题讨论】:
-
为什么在后台任务中需要
HttpContext?在我看来,这是一个糟糕的设计。您应该将此任务所需的信息作为参数传递给该任务。 -
我很想避免它,但我被困在棕地应用程序场景中,我在日志记录任务中使用的库具有 HttpContext.Current 依赖项。我试图避免大量的重写工作。
标签: asp.net multithreading c#-4.0