您的位置:首页 > 其它

生产者和消费者模式

2013-10-24 22:30 260 查看
先建一个单例类:

 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占用率过高

                }

            }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: