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)。

  • 相关阅读:
    AspNetCore打造一个“最安全”的api接口
    efcore分表分库原理解析
    对于经常接触的分页你确定你真的会吗
    Monitor的扩展支持string的超时锁
    Excel导出
    搭建私有Git服务器-GitLab
    C# 爬取网易Buff进行购买
    .Net Core 使用弹性和瞬态故障处理库Polly
    JS Table表格添加多选框
    JS 用户头像展示
  • 原文地址:https://www.cnblogs.com/henxiao25/p/4234803.html
Copyright © 2011-2022 走看看