• 如何通过多线程轮询待发送邮件进行发送


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

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

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

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

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

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


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


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


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


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

  • 相关阅读:
    楷书四大家
    什么叫同学?
    css悬浮在页面顶端
    jq给页面添加覆盖层遮罩的实例
    jQuery实现遮罩层
    jQuery实现的文字逐行向上间歇滚动效果示例
    jquery实现文字由下到上循环滚动的实例代码
    Js/Jquery获取网页屏幕可见区域高度
    本机无法访问虚拟机配置的域名
    thinkphp5+GatewayWorker+Workerman
  • 原文地址:https://www.cnblogs.com/henxiao25/p/4234803.html
Copyright © 2020-2023  润新知