asp.net - 使用 ASP.NET session 时是否可以强制请求并发?

标签 asp.net session concurrency

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 部分。 ,有关其完成原因的更多信息。

基于上述情况,尝试解决该机制似乎并不是一个好主意。

就像您提到的那样,保持请求简短并将长时间运行的代码移出请求线程。此外:

  • 如果不需要,请禁用 session 。最重要的是,如果您在该请求中发送任何大型内容,请这样做。
  • 避免不必要地使用 session 。

  • 无论如何,所有这些都是你应该已经在做的事情。

    关于asp.net - 使用 ASP.NET session 时是否可以强制请求并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702602/

    相关文章:

    python - 如何在异步中并发运行任务?

    c# - 如何跨越多个 TPL 数据流 block 的 MaxDegreeOfParallelism?

    使用条件变量的 C++ 监视器类/包装器

    asp.net - 如何向asp.net中的动态控件添加事件处理程序以进行回发?除了使用Javascript之外,还有可能吗?

    php - 每次页面刷新后 session 不保留值

    使用 ASP.NET(aspx 页面)上传时,Javascript 返回错误的文件大小

    php - 如何在不重新加载页面的情况下保持 session 事件?

    C# 清除 session

    javascript - 未捕获的类型错误 : NaN JavaScript Sharepoint

    c# - 错误 : Excepiton in System. Threading.ThreadAbortException:线程被中止