我认为这是一个反复出现的问题,但我找不到具体的答案。
我有一个Asp.net MVC3应用程序,我们将切换到AsyncController以改进应用程序,我认为所有设置都是正确的。但是,此应用程序将在具有一个中央会话状态服务器的负载均衡器中运行。 Asp.net State Service。
需要从会话中读取的请求,因此来自许多用户的数百个并行请求会因为会话对象序列化来回状态服务器而最终排队吗?或者最糟糕的是,如果我的Task.StartNew()线程需要一段时间才能完成会话对象NULL吗?而这又倍增了许多用户......
我想忘记写这些请求的会话吗?它会给出错误还是只是忽略书面价值?
假设线程池大小不在等式中,我想了解会话(等待)在这种情况下的行为。
修改 你能解释为什么这种方法有效并且是否在所有压力情景中都被授予了?
var current = System.Web.HttpContext.Current;
AsyncManager.OutstandingOperations.Increment();
Task.Factory.StartNew(() =>
{
System.Web.HttpContext.Current = current;
由于
答案 0 :(得分:1)
在State Server中存储会话状态不应影响异步等待,反之亦然。
我们不应该在 Task.Run(某事物)中使用 HttpContext (在您的情况下为会话状态)。由于Web请求的性质,HttpContext可能在生成的线程内不可用。
仅供参考: 在使用负载平衡时,我没有看到您提出有关缓存的问题。如果应用程序恰好使用Cache,则需要考虑。