如何通過多線程輪詢待發送郵件進行發送

  默認情況下,C# 程序具有一個線程。此線程執行程序中以 Main 方法開始和結束的代碼。Main 直接或間接執行的每一個命令都由默認線程(或主線程)執行,當 Main 返回時此線程也將終止。不過,可以創建輔助線程,以便與主線程一起並行執行代碼。這些線程通常稱爲“輔助線程”。

  多線程處理解決了吞吐量和響應性的問題,但同時也帶來了資源共享問題,如死鎖和爭用狀態。多線程特別適用於需要不同資源(如文件句柄和網絡連接)的任務。爲單個資源分配多個線程可能會導致同步問題,線程會被頻繁阻止以等待其他線程,從而與使用多線程的初衷背道而馳。

  下面本人分享-如何通過多線程輪詢待發送郵件進行發送。實現過程:設計發件箱數據表,配置發件服務器、開發WinForm程序進行發送。

1. 設計發件箱
發件箱記錄發送郵件,內容包括-發件人、收件人、郵件標題、郵件內容、增加時間、發送時間及發送失敗信息。

2. 發送郵件配置
發送郵件採用C# SMTP協議,需要設置發件人及發送服務器相關信息

3. 實現WinForm 程序
程序界面設計爲工具欄、待發送信息,發送情況及顯示發送進程信息。程序設計爲兩個計時器,一個輪詢待發送郵件,一個進行郵件發送。


3.1. 讀取數據庫待發送郵件
使用計時器輪詢發件箱,讀取待發送郵件。


3.2. 線程發送郵件
使用線程調用發件郵件組件進行郵件發送。


3.3. 郵件發送處理
發送成功後,更新待發送郵件狀態爲:“已發送”,發送失敗時,更新待發送郵件狀態爲:“待發送”,同時設置下次輪時間爲下30分鐘。


至此,通過多線程輪詢待發送郵件進行郵件發送功能實現分享完畢。多線程在C#開發比較難調試,爲此需要對程序發送日誌進行詳情記錄並報告線程執行情況,以便開發人員維護。單獨使用線程(Thread)進行發送郵件,很容易造成程序假死,爲此,本人採用使用計時器的方式調用線程(Thread)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章