C# Wait将HttpContext.Current设置为null/Previor-无法手动设置

C# Wait将HttpContext.Current设置为null/Previor-无法手动设置,c#,asp.net,asynchronous,async-await,C#,Asp.net,Asynchronous,Async Await,如何使用手动设置的HttpContext.Current/CallContext.HostContext使等待恢复?当其返回到原始状态时,All将等待对其进行更改(不将其还原/将其还原为其他值) 它从何处恢复,如何覆盖 我手动将其设置为虚拟执行页面,如果从上下文为null的应用程序/调度程序执行,它将返回null(如果从另一个页面执行,它将返回该页面) 我尝试过各种方法,比如设置SynchronizationContext为null时,甚至强制上下文使用反射创建内部AspNetSynchroni

如何使用手动设置的
HttpContext.Current
/
CallContext.HostContext
使等待恢复?当其返回到原始状态时,All将等待对其进行更改(不将其还原/将其还原为其他值)

它从何处恢复,如何覆盖

我手动将其设置为虚拟执行页面,如果从上下文为null的应用程序/调度程序执行,它将返回null(如果从另一个页面执行,它将返回该页面)

我尝试过各种方法,比如设置
SynchronizationContext
为null时,甚至强制上下文使用反射创建内部AspNetSynchronizationContext,但没有任何帮助

(答案不是针对用户
HttpContext.Current
,也不是针对
.Wait()
等使用空同步上下文。)

。。。同步上下文

这本应该有所帮助,也是前进的方向。事实上,这是我能想到的唯一方法。它是进入
wait
的唯一挂钩,允许您控制延续的环境。如果看不到代码,就找不到错误

如果无法使内置同步上下文配合,则需要安装一个与内置同步上下文行为完全相同的同步上下文

HttpContext.Current
存储在某个.NET概念的“调用上下文”中。我忘了反编译代码以查看它到底存储在哪里


您可能应该使用完全不同的方法。调用一个内部URL来执行页面,所有这些问题都会消失。不再需要做黑客了。如果这是一个高频操作,考虑每一个伪造的HTTP请求运行多个页面。这减少了开销。

我可以问一下为什么需要更改上下文吗?@SamiKuhmonen因为当时没有上下文(或者需要切换到新页面)+网络表单控件正在使用它是的-谢谢,但是在那里什么也没有得到。不能只使用url(执行者也需要上下文)和处理程序执行,它最终会出现同样的问题。好吧,我不能(也没有人可以)在没有看到代码的情况下帮助你。你犯了一个错误。一般方法是有效的。帮助我们帮助您并发布代码。在ASP.NET上,“充分表现”尤其棘手。有许多帮助程序方法直接向下转换到
AspNetSynchronizationContext
,如果您使用自己的方法,则会自动失败:/
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