zoukankan      html  css  js  c++  java
  • 如何通过多线程轮询待发送邮件进行发送

      默认情况下,C# 程序具有一个线程。此线程执行程序中以 Main 方法开始和结束的代码。Main 直接或间接执行的每一个命令都由默认线程(或主线程)执行,当 Main 返回时此线程也将终止。不过,可以创建辅助线程,以便与主线程一起并行执行代码。这些线程通常称为“辅助线程”。

      多线程处理解决了吞吐量和响应性的问题,但同时也带来了资源共享问题,如死锁和争用状态。多线程特别适用于需要不同资源(如文件句柄和网络连接)的任务。为单个资源分配多个线程可能会导致同步问题,线程会被频繁阻止以等待其他线程,从而与使用多线程的初衷背道而驰。

      下面本人分享-如何通过多线程轮询待发送邮件进行发送。实现过程:设计发件箱数据表,配置发件服务器、开发WinForm程序进行发送。

    1. 设计发件箱
    发件箱记录发送邮件,内容包括-发件人、收件人、邮件标题、邮件内容、增加时间、发送时间及发送失败信息。

    2. 发送邮件配置
    发送邮件采用C# SMTP协议,需要设置发件人及发送服务器相关信息

    3. 实现WinForm 程序
    程序界面设计为工具栏、待发送信息,发送情况及显示发送进程信息。程序设计为两个计时器,一个轮询待发送邮件,一个进行邮件发送。


    3.1. 读取数据库待发送邮件
    使用计时器轮询发件箱,读取待发送邮件。


    3.2. 线程发送邮件
    使用线程调用发件邮件组件进行邮件发送。


    3.3. 邮件发送处理
    发送成功后,更新待发送邮件状态为:“已发送”,发送失败时,更新待发送邮件状态为:“待发送”,同时设置下次轮时间为下30分钟。


    至此,通过多线程轮询待发送邮件进行邮件发送功能实现分享完毕。多线程在C#开发比较难调试,为此需要对程序发送日志进行详情记录并报告线程执行情况,以便开发人员维护。单独使用线程(Thread)进行发送邮件,很容易造成程序假死,为此,本人采用使用计时器的方式调用线程(Thread)。

  • 相关阅读:
    深入理解JavaScript的闭包特性 如何给循环中的对象添加事件
    兼容低版本浏览器的getElementByClassName方法
    印象深刻的bug
    pyinstaller将python编写的打卡程序打包成exe
    自动化环境搭建遇到问题
    VS2010带不出System.Data.OracleClient这个引用的解决方案
    迭代与列表生成式、生成器
    Python函数
    Python基础
    python+Selenium 环境搭建
  • 原文地址:https://www.cnblogs.com/henxiao25/p/4234803.html
Copyright © 2011-2022 走看看