ASP.NET 中使用 Thread 的问题

时间:2021-05-13 05:39:16
在网友 sp1234 的指点下开始在 ASP.NET 中使用 Thread 耗时任务,一直用的还比较自在。但最近又有问题了,网络上搜索了两天,没找到比较完整的 Thread 资料,只好又来求助大家了。应用场景是这样的:

当用户A打开ASP.NET页面将开启一Thread处理一个耗时任务,如下:

Thread thread = new Thread(new ThreadStart(LongTimeWork));
thread.Start();

同时用户B也打开这个页面,同样开启一个Thread(这个),现在的问题是:原以为A启动的Thread会与B启动的Thread完全隔离,事实上好像并不是这么回事,结果两个 LongTimeWork 执行过程中相互影响,导致混乱。

怎么才能使 A / B 安全的以不同的 Thread 执行呢?

14 个解决方案

#1


该回复于2010-12-02 14:53:02被版主删除

#2


用不同的Name试试

#3


发现问题后就改为 设置不同 thread.Name 了。问题是否安全了,还有待测试。但总想了解一下,这里 thread 到底是怎么回事。

#4


http://msdn.microsoft.com/zh-tw/library/6b1kkss0.aspx

#5


Thread.Join 方法 
http://www.albahari.com/threading/

#6


使用线程池。ThreadPool.QueueUserWorkItems(new WaitCallBack(LongTimeWork)).可以自动管理线程。

#8


只在winform 中使用过线程!

#9


lock一下,你要访问的资源。这样的话,比较好一点,不会起冲突

#10


其实asp.net程序本身就是个多线程的程序,就用不着也开多线程了,如果你的任务耗时,可以使用AJAX来操作啊。

#11


根据大家的提示找到了更多资料,看了,还没消化

lock 一下, LongTimeWork 里面共用的资源应该就是数据库了,添加或修改记录:按设计思路 A 用户 只添加修改 A 的记录 B 用户只添加修改 B 的记录。 数据库处理用了 SqlHelper 类, lock 谁呢

现在就是造成这样的混乱:有时候发现 A 修改了 B 的记录

#12


该回复于2010-11-13 09:55:10被版主删除

#13


引用 11 楼 fonshen 的回复:
根据大家的提示找到了更多资料,看了,还没消化

lock 一下, LongTimeWork 里面共用的资源应该就是数据库了,添加或修改记录:按设计思路 A 用户 只添加修改 A 的记录 B 用户只添加修改 B 的记录。 数据库处理用了 SqlHelper 类, lock 谁呢

现在就是造成这样的混乱:有时候发现 A 修改了 B 的记录

外面是不是有个一个类的方法来访问sqlhelper,对把
那你可以在你的这个类中定义一个 private static object o=new object()
在那个方法的地方
lock(o)
{
//sqlhelper的调用,就OK了啊
}

#14


该回复于2010-11-13 09:56:23被版主删除

#1


该回复于2010-12-02 14:53:02被版主删除

#2


用不同的Name试试

#3


发现问题后就改为 设置不同 thread.Name 了。问题是否安全了,还有待测试。但总想了解一下,这里 thread 到底是怎么回事。

#4


http://msdn.microsoft.com/zh-tw/library/6b1kkss0.aspx

#5


Thread.Join 方法 
http://www.albahari.com/threading/

#6


使用线程池。ThreadPool.QueueUserWorkItems(new WaitCallBack(LongTimeWork)).可以自动管理线程。

#7


#8


只在winform 中使用过线程!

#9


lock一下,你要访问的资源。这样的话,比较好一点,不会起冲突

#10


其实asp.net程序本身就是个多线程的程序,就用不着也开多线程了,如果你的任务耗时,可以使用AJAX来操作啊。

#11


根据大家的提示找到了更多资料,看了,还没消化

lock 一下, LongTimeWork 里面共用的资源应该就是数据库了,添加或修改记录:按设计思路 A 用户 只添加修改 A 的记录 B 用户只添加修改 B 的记录。 数据库处理用了 SqlHelper 类, lock 谁呢

现在就是造成这样的混乱:有时候发现 A 修改了 B 的记录

#12


该回复于2010-11-13 09:55:10被版主删除

#13


引用 11 楼 fonshen 的回复:
根据大家的提示找到了更多资料,看了,还没消化

lock 一下, LongTimeWork 里面共用的资源应该就是数据库了,添加或修改记录:按设计思路 A 用户 只添加修改 A 的记录 B 用户只添加修改 B 的记录。 数据库处理用了 SqlHelper 类, lock 谁呢

现在就是造成这样的混乱:有时候发现 A 修改了 B 的记录

外面是不是有个一个类的方法来访问sqlhelper,对把
那你可以在你的这个类中定义一个 private static object o=new object()
在那个方法的地方
lock(o)
{
//sqlhelper的调用,就OK了啊
}

#14


该回复于2010-11-13 09:56:23被版主删除