如何使用手动设置HttpContext.Current
/ CallContext.HostContext
进行等待恢复?当它返回原始状态时,所有等待更改它(不会将其恢复/恢复到其他值)。
从哪里恢复它以及如何重写它?
我手动将其设置为虚拟执行页面,如果从application / scheduler中执行,其中context为null,则返回null(如果来自另一个页面,则返回到该页面)。
var wr = new System.Web.Hosting.SimpleWorkerRequest(...);
var context = new HttpContext(wr);
HttpContext.Current = context;
...
await Task.Delay(100);
// HttpContext.Current has now returned to old value / null
我尝试了各种各样的事情,例如当它为空时设置SynchronizationContext
- 甚至强迫上下文使用反射创建内部AspNetSynchronizationContext - 但没有任何帮助。
(答案不是用户HttpContext.Current
,也不是对.Wait()
等使用空同步上下文。)
答案 0 :(得分:0)
... SynchronizationContext ...
这应该有所帮助,是可行的方法。事实上,我能想到的唯一方法。它是await
中唯一允许您控制延续环境的钩子。没有看到代码,就找不到错误。
如果您无法获得内置的同步上下文,则需要安装自己的内容,其行为与内置的相同。
HttpContext.Current
存储在一些“调用上下文”中,这是一个.NET概念。我忘记了反编译代码以查看它存储的确切位置。
您应该完全使用不同的方法。调用内部URL来执行您的页面,所有这些问题都会消失。不再需要做黑客了。如果这是一个高频操作,请考虑每个伪HTTP请求运行多个页面。这减少了开销。