The123(萝卜白菜各有所爱,你是白菜还是萝卜?)进来看看!

ldw701 2005-01-31 10:17:27
看了你在帖子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()
{
//发送代码
}
...全文
151 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
njuzgj 2005-02-04
  • 打赏
  • 举报
回复
UP
bergkamp_my 2005-02-04
  • 打赏
  • 举报
回复
好像很多人都喜欢萝卜
噯卟釋手 2005-02-04
  • 打赏
  • 举报
回复
up
qwjcool 2005-02-04
  • 打赏
  • 举报
回复
我是萝卜,瓦卡卡
xueqs 2005-02-04
  • 打赏
  • 举报
回复
gz
The123 2005-02-04
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3765/3765102.xml?temp=.8962061

不要重复发帖
blackhero 2005-02-04
  • 打赏
  • 举报
回复
学习
warren1999 2005-01-31
  • 打赏
  • 举报
回复
hehe
心情解码 2005-01-31
  • 打赏
  • 举报
回复
:)


















-

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧