我如何使我的代码线程安全在这种情况下

本文关键字:安全 这种情况下 线程 代码 何使 我的 | 更新日期: 2023-09-27 18:08:55

我有一个ASP.NET Webform应用程序。我为我的数据库添加了一个Ado.net Entity Data Model,它有一个名为GatewayProviders的表。我的表有3列:Id(int), Description(string), GatewayType(int)。我在webform1.aspx.cs中添加了两个方法:

 public void update()
    {
        GatewayProvider gp = DB.GatewayProviders.Find(12);
        gp.Description = "pejman";
        DB.SaveChanges();
    }
    public void update2()
    {
        GatewayProvider gp = DB.GatewayProviders.Find(12);
        gp.Description = "nazraz";
        DB.SaveChanges();
    }

我创建了一个名为Button1webform1.aspx的按钮,并为按钮添加了click-event,像这样:

  protected void Button1_Click(object sender, EventArgs e)
    {
        Thread th = new Thread(new ThreadStart(update));
        Thread th2 = new Thread(new ThreadStart(update2));
        th.Start();
        th2.Start();
    }

假设我在web上发布这个应用程序,然后两个客户端同时点击按钮,我的应用程序给他们错误!!我该怎么修理它?

如何使我的代码threadsafe

我如何使我的代码线程安全在这种情况下

你知道基本的ASP.NET吗?下面是提示:

ASP。NET是请求/响应/完成。点击->发送订单到服务器->处理->发送HTML。

在CLick处理程序中

启动线程。一旦处理程序结束——HTML就被发送出去了。. NET已完成。

在你的例子中:

您启动线程,但随后处理在可能执行之前结束。确切的错误消息可能有有趣的信息:哪个对象是空的;)

你绝对必须在结束click处理程序之前等待两个线程完成,因为然后(一旦你结束click处理程序)生成HTML并发送到客户端