首页 新闻 搜索 专区 学院

多线程问题

0
悬赏园豆:5 [已关闭问题]

实在实在是没分了,以后有分可能给大家补上。

SmartFramework@live.jp的主页 SmartFramework@live.jp | 初学一级 | 园豆:5
提问于:2010-06-12 08:55
< >
分享
其他回答(1)
0

我想这段程序执行结果肯定会很诡异吧?

主要应该是Action里面引用了外部变量kvConn,在这里会形成闭包,如果不知道闭包,你可以去查一下。

解决倒是很简单

在Action里面添加

KeyValePair<string,string> tempkvConn=kvConn;

使用一个局部的tempkvConn保存kvconn即可,当然后面的也要改过来

LittlePeng | 园豆:3445 (老鸟四级) | 2010-06-12 09:42
闭包在这里是没啥问题的。执行什么的都没问题就是我不知道用主线程在所有子线程执行结束后再执行。
支持(0) 反对(0) SmartFramework@live.jp | 园豆:5 (初学一级) | 2010-06-12 09:51
我怎么感觉这里的闭包会有问题呢,你这里同时开这么多个线程如果在web下很有问题呢,用线程池好些。 至于主线程在所有子线程执行结束后再执行,我看很多时候都是主线程使用定时器检测各个线程的状态,都完成了再执行主线程。应该也有回调机制,那就不知道了:)
支持(0) 反对(0) LittlePeng | 园豆:3445 (老鸟四级) | 2010-06-12 17:08
0

你可以使用线程池去实现你的要求,线程池中提供的ThreadPool.QueueUserWorkItem和ManualResetEvent
完全可以满足你的要求。在微软的例子中叶提供了
相关的列子。地址为:
http://msdn.microsoft.com/en-us/library/3dasc8as(VS.80).aspx 

萧萧空间 | 园豆:305 (菜鸟二级) | 2010-06-12 15:54
线程池中提供的ThreadPool.QueueUserWorkItem的最大个数不能超过64个,超过64个就会抛异常的
支持(0) 反对(0) SmartFramework@live.jp | 园豆:5 (初学一级) | 2010-06-13 08:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册