我已经创建了一个简单的表单,它正在加载一个像电子邮件,名称,城市等几列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