生产者和消费者模式

先建一个单例类:
 public readonly static SendEmailManagercs Instance = new SendEmailManagercs();  //声明一个静态的类变量
 private SendEmailManagercs()  //构造方法私有,外部代码不能直接new来实例化它
        {


        }




建立一个产品仓库(队列)
 private Queue<JobInfo> q = new Queue<JobInfo>();




定义一个类存待处理产品的信息:
public class JobInfo
    {
        public string Email { get; set; }
        public string Msg { get; set; }
    }


构建成对象,向队列添加任务
public void AddJob(string toEmail, string msg)
        {
            JobInfo jjob = new JobInfo();
            jjob.Email = toEmail;
            jjob.Msg = msg;
            q.Enqueue(jjob);//把任务放在队列中,生产一个“任务”
           // logger.Debug("一个任务加进来了,Email=" + toEmail + ",内容=" + msg);
        }




当应用程序启动的时候:
 protected void Application_Start(object sender, EventArgs e)
        {
  SendEmailManagercs.Instance.Start();
}


启动线程:
public void Start()
        {
            Thread th = new Thread(threadStart);
            th.Start();
            logger.Debug("做任务线程已经启动");
        }
        private void threadStart()
        {
            while (true)
            {
                logger.Debug("有任务" + q.Count + "个");
                if (q.Count > 0)
                {
                    while (q.Count > 0)
                    {
                        //从队列中取出任务“消费”任务
                        JobInfo job = q.Dequeue();
                        try
                        {
                            MailSend.SendEmail(job.Email, job.Msg);
                        }
                        catch (Exception ex)
                        {
                            logger.Debug("向" + job.Email + "发送邮件错误!", ex);
                        }
                    }
                }
                else
                {
                    logger.Debug("没有任务!");
                    Thread.Sleep(5000);//休息一会,防止CUP占用率过高
                }
            }
}





















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值