日期:2014-05-18  浏览次数:20375 次

请问如何实现用异步插入数据库并发送邮件,谢谢。
在Web下开发,我想实现异步发送邮件的功能,比如说,在客户成功提交了一个订单时,程序首先保存订单,然后把这些数据发送邮件给管理员和客户,并向数据库插入发送邮件的记录,客户的数量可能是一个也可能很多,然后报告说订单提交成功。如果不用异步方式,那么当给很多客户发送邮件的时候就很耗时,用户就要等很久才能看到成功提示,因此我想,在保存了订单数据后,就用另一个线程来发送邮件,从而当前线程立即就可以向用户反馈订单提交成功的提示信息。  

发邮件和插入发送记录的过程是否可以用异步实现?BackgroundWorker 是否可以用于web开发?  
不知应怎样实现?希望有点示例代码,谢谢!

------解决方案--------------------
把插入数据库的和发送邮件的分开。 发送的邮件用一个batch program(console program)
去周期性执行,不断的发送邮件。
------解决方案--------------------
BackgroundWorker 不可以用于web开发,只能用ajax,可以把数据库操作放在后台方法中,发邮件可以采用webservice
------解决方案--------------------
或者邮件让sqlserver去管理
------解决方案--------------------
做一个MSMQ,就可以了.

------解决方案--------------------
简单的方法可以用异步
如:
private void SendEmail(object sender ,EventArgs s)
{

}
protected void Button2_Click(object sender, EventArgs e)

//Save in Db
EventHandler ev=new EventHandler(SendEmail);
ev.BeginInvoke(null,EventArgs.Empty,null,null);
}
复杂点,可以做个WinService,由WinService负责发送
------解决方案--------------------
可以先把数据保存在本地,提交完后统一再提交!
------解决方案--------------------
一般来说,可以在Application_Start的时候启动一个后台线程,定时检查数据库,查看有没有待发送邮件。当页面操作需要发送邮件时,不直接调用后台线程,而把有关信息插入数据,等后台线程自己去取。