我已經創建了一個簡單的表單,它正在加載一個像電子郵件,名稱,城市等幾列csv文件,我試圖通過我有2個smtp服務器發送每日更新。我以爲使用背景工作是因爲它具有進度功能(對於我的進度條),但我也在本網站上閱讀過其他方法,例如任務,線程或線程池。通過smtp服務器異步發送電子郵件 - 多線程發送電子郵件
我還讀到,發送電子郵件必須使用異步方法完成。我不知道是否有可能,或者它是否可以優化性能,但我試圖做到以下幾點:
對於每個smtp我想用一個線程來讀取,比方說,從csv文件中的10行, 按字段拆分行並將信息發送給另一個線程,該線程將該消息發送到該小列表中的每封電子郵件。我想這樣做爲每個smtp認證程序節省一些寶貴的時間。
因爲連接到每個電子郵件的smtp需要整個套接字過程,每次像HELO,AUTH,DATA。如果我要發送電子郵件列表,我可以在認證後保持套接字打開,並且只更改我發送的數據。 10行只是一個可以自定義更改的變量。 所以,每個smtp的2個任務,意味着總共4個或者可以根據我將要使用的smtps的數量增加。
我還可以爲每個任務或背景工作人員使用其他線程嗎?
我有點困惑,因爲我是新來的C#,我還沒有找到任何關於此的例子。自從我試圖瞭解背景工作者/線程如何工作但仍未成功以來,已經過去了一個多星期。任何幫助將不勝感激,任何想法比我更好地提高性能謝謝!
感謝您的回覆!所以,你說我應該只使用線程池而不是task/backgroundworker/thread,對吧?你是僅僅因爲你認爲實現它或者因爲方法性能更容易才這樣說?我並不是要求最簡單的方法去做,我需要基於我發佈的信息的最佳方法。之後,我可以在谷歌搜索如何做到這一點。我還閱讀了有關等待和異步的信息,這些信息僅在新的Visual Studio中可用,我希望某些事情能夠像他們一樣行事,我的意思是這些線程在等待時用於其他事情。 – ShaMora 2012-03-03 17:48:37
通過創建線程,您正在使用backgroundworkers。你將它們作爲一個集合管理,即一個線程池。這樣您將獲得最佳性能和易於實施。雖然await和async關鍵字是.net 4.5的新增功能,仍處於測試階段,但框架中仍有許多異步方法。查找beginxxxx方法,例如郵件組件上的beginSend。 – 2012-03-04 11:26:21