如何在此场景中使我的代码线程安全?

时间:2014-06-17 14:55:18

标签: c# asp.net multithreading

我有一个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();
    }
假设我在网上发布这个应用程序,然后两个客户端同时点击按钮,我的应用程序给他们错误!!我该如何解决?

如何制作代码threadsafe

1 个答案:

答案 0 :(得分:0)

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

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

在CLick处理程序中启动线程。一旦处理程序结束 - 发送HTML,ASP.NET就完成了。

在你的情况下:

启动线程,然后处理在执行之前结束。确切的错误消息可能有有趣的信息WHICH对象为null;)

在结束点击处理程序之前,你必须等待两个线程完成,因为那么(一旦你结束点击处理程序),就会生成HTML并发送给客户端。