ASP.NET 不允许同一 session 的并发请求;这意味着用户一次只能发出 1 个请求。
例如,假设我们有 Test1.aspx
:
public partial class Test1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["test"] = 1;
System.Threading.Thread.Sleep(int.Parse(Request.QueryString["timeout"]));
}
}
... 和
Test2.aspx
: public partial class Test2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["test"] = 1;
Label1.Text = DateTime.Now.ToString("dd/MM/yy HH:mm:ss");
}
}
当我们访问
Test1.aspx?timeout=10000
,然后立即访问 Page2.aspx
,第二个请求必须等待 10 秒,直到第一个请求完成。我今天才知道这个,我已经使用 ASP.NET 5 年了!直到我在 MSDN 页面( ASP.NET Session State Overview )的底部阅读了它,我才真正相信它。
那么,有没有办法强制并发?也就是说,除了使页面更快,或者将长时间运行的代码移动到后台线程之外。我知道您可以将 session 设为只读,但我不完全确定这是一个实用的选项。
最佳答案
虽然我刚刚从这个问题中了解到这一点,但我一定要检查 Implementing a Session-State Store Provider 中的 Locking Session-Store Data 部分。 ,有关其完成原因的更多信息。
基于上述情况,尝试解决该机制似乎并不是一个好主意。
就像您提到的那样,保持请求简短并将长时间运行的代码移出请求线程。此外:
无论如何,所有这些都是你应该已经在做的事情。
关于asp.net - 使用 ASP.NET session 时是否可以强制请求并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702602/