ACP*_*ACP 6 c# asp.net multithreading
海家伙,
我有以下代码将不同的邮件发送到我的asp.net Web应用程序中的不同用户
foreach (DataRow dataRow in dataTable.Rows)
{
sendMails();
}
public void sendMails()
{
//mail code
}
Run Code Online (Sandbox Code Playgroud)
现在我想在foreach循环中使用线程,但我不知道结果是什么,因为如果我开始'n'线程池中发生什么线程...考虑我的数据表包含1000行,
是否可以同时运行1000个线程?
foreach (DataRow dataRow in dataTable.Rows)
{
ThreadStart ts1 = new ThreadStart(sendMails);
Thread thread1 = new Thread(ts1);
thread1.Start();
}
public void sendMails()
{
//mail code
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 14
启动一个可以完成发送所有邮件的线程:
new Thread(() => {
foreach (DataRow dataRow in dataTable.Rows)
{
sendMails();
}
}).Start();
Run Code Online (Sandbox Code Playgroud)
使用你已经获得的代码,线程池不会发生任何事情 - 你将在线程池之外完全创建新线程.
您确定要为每封邮件使用一个帖子 - 甚至是多个线程吗?我想你会受到与本地SMTP服务器连接的限制,启动多个线程对你没有帮助.
如果使用线程的目的是能够将页面返回给用户说"是的,我现在正在发送邮件",那么启动单个线程以在后台发送所有内容(根据Darin的建议)更为明智.另一方面,它确实意味着如果该过程因任何原因而停止,您最终可能只发送了一半.另一种选择(如Charlie所建议的)是使用排队系统(例如文件,数据库或MSMQ).这样你就可以阻止,直到你排队所有的邮件,这意味着当你回到用户时你可以确信数据是"安全的" - 但是你可以在后台发送实际的邮件,并提供可能的服务.更健壮.
| 归档时间: |
|
| 查看次数: |
7142 次 |
| 最近记录: |