none
asp.net网站中使用多线程对数据库更新 RRS feed

  • 问题

  • 有一个课程列表的页面,而且课程列表是动态的,会隔段时间增加一些;

    所有的班级(几十个班级),每个班级有一个班主任,班主任去接受课程列表中的一个或多个课程。接完课程后,分发给班级里的每个成员。

    分发:每个成员要插入数据库一条记录,来记录当前成员已经被分发了当前课程。

    有的班级可能有2000多人员,所以分发耗时。

    现在打算,在班主任接受课程的时候,另开一个线程来执行分发的工作。

    分发时另开线程的代码我是这样写的:

    //进行分发的类。类里面主要是插入数据库的操作。 //arg1,arg2,arg3是三个分发时需要的参数 ClassAssign classAssign = new ClassAssign(arg1, arg2, arg3); //AssignAll方法是分发的主要方法.是一个普通的方法 Thread assignThread = new Thread(new ThreadStart(classAssign.AssignAll)); assignThread.IsBackground = true; assignThread.Start();

    但是,我测试发现,当一个班主任接受课程后,此时后台正在执行给他的成员分发课程的操作;如果第二个班主任也接了一个课程,当然也开始给这个班主任的成员分发课程。

    结果导致,第二个班主任的成员全部分发了课程,而第一个班主任的成员没有全部分发,只是分发了一部分。

    很是疑惑,请帮忙分析下原因,给一个解决方案。我对多线程不熟悉,第一次用。谢谢。

    这样调用,应该不会线程间数据的混乱吧?我每个线程都新建了一个ClassAssign 的实例,应该不会一个线程使用了另外一个线程的ClassAssign 类的实例吧?

    2012年4月25日 8:10

答案

全部回复