一尘不染

多用户ASP.NET Web应用程序中静态变量的范围

c#

静态变量是否在用户会话中保留其值?

我有一个ASP.NET Web应用程序,其中有两个按钮。一个用于设置静态变量值,另一个用于显示静态变量值。

namespace WebApplication1
{

public partial class WebForm1 : System.Web.UI.Page
{
    public static int customerID;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void ButtonSetCustomerID_Click(object sender, EventArgs e)
    {
        customerID = Convert.ToInt32(TextBox1.Text);
    }

    protected void ButtonGetCustomerID_Click(object sender, EventArgs e)
    {
        Label1.Text = Convert.ToString(customerID);
    }
}

}

尽管这在单用户环境中有效,但是如果有2个用户同时从两台计算机登录,会发生什么情况,用户1将值设置为100,然后用户2将值设置为200。在用户1调用“获取值”按钮之后。他将看到什么价值?


阅读 452

收藏
2020-05-19

共1个答案

一尘不染

静态变量是否在用户会话中保留其值?

是的,这就是为什么在Web应用程序中使用静态变量时要非常小心的原因。您将在并发问题中运行,因为服务请求的多个线程可以修改变量的值。

尽管这在单用户环境中有效,但是如果有2个用户同时从两台计算机登录,会发生什么情况,用户1将值设置为100,然后用户2将值设置为200。在用户1调用“获取值”按钮之后。他将看到什么价值?

之后,用户将看到200。

2020-05-19