多线程群发邮件小例子

来源:互联网 发布:2016年网络茶叶销售 编辑:程序博客网 时间:2024/05/22 01:37
   //线程池发送邮件   private static void SendEmailsUsingThreadPool(List<Recipient> recipients)    {      //线程数      var coreCount = Environment.ProcessorCount;      //邮件数      var itemCount = recipients.Count;      //每个线程执行记录数      var batchSize = itemCount / coreCount;      var pending = coreCount;      using (var mre = new ManualResetEvent(false))      {        for (int batchCount = 0; batchCount < coreCount; batchCount++)        {          var lower = batchCount * batchSize;          var upper = (batchCount == coreCount - 1) ? itemCount : lower + batchSize;          ThreadPool.QueueUserWorkItem(st =>          {            for (int i = lower; i < upper; i++)              SendEmail(recipients[i]);            if (Interlocked.Decrement(ref pending) == 0)              mre.Set();          });        }        mre.WaitOne();      }          }    //发送邮件方法    private static void SendEmail(Recipient recipient)    {      //Send your Emails here    }  }  //邮件实体  class Recipient  {    public string FirstName { get; set; }    public string LastName { get; set; }    public string EmailAddress { get; set; }  }


原创粉丝点击