The123(萝卜白菜各有所爱,你是白菜还是萝卜?)进来看看!
看了你在帖子http://community.csdn.net/Expert/topic/3683/3683291.xml?temp=.5395777中的留言,想问问你lock那段代码该怎么写??
你要多线程,你的每个线程要做的不都是同件事吗?
//扫描数据库,看有没有新的要发送的邮件,有的话,多线程从数据库中读出记录,并发送!(dosomething())
你多new几个thread不就是多线程了吗?
然后你再考虑是同步还是异步,你要求“并且每个线程读的记录不能重复”
那么还是要做同步的处理,就是当一个thread读了一条发送记录,
那其他的线程都要能知道不能再读这个记录了,要从下一个记录开始读了。
所以你要声明一个全局变量,标记数据库里的发送记录的位置。
然后当线程访问时你就要对这个变量加锁lock(),读完记录就把这个变量+1,
表示该读下条记录了,在这个过程中其他线程必须要等待,然后“发送”就不要再lock了,
要注意lock的代码只是做读记录的,读完就该把锁扔给下一个thread然后自己继续去处理"发送"。
所以针对你的需求,读记录没必要用“多线程了”,一个就好轻松自在,上下通气。
发呢显然就要多线程了。
foreach(DataRow dr in YourDataTable.Rows)
{
if(dr复合发送的要求)
{
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(this.SendSomething));
thread.Start();
}
}
private void SendSomething()
{
//发送代码
}