我有以下代码打开一个页面,并向在课程会话中注册的学生发送电子邮件及其附加证书,生成电子邮件和证书,所有这些都在不同的aspx页面中。现在,我想在没有用户等待所有电子邮件发送的情况下生成相同的过程,我将在此过程中添加其他代码以通知我是否存在任何问题。任何人都可以指出我正确的方向来实现这一目标。我已经阅读了几个论坛,但大多数时候我发现Windows服务作为一个选项,IMO它有点过分杀人。我感谢任何建议
先谢谢了,
丹
Protected Sub lbEmailOLetter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbEmailOLetter.Click
Dim id As Integer
id = hfSessionID.Value
If id > 0 Then
Try
HttpContext.Current.Server.Execute("Email.aspx?SessID=" & id, False)
HttpContext.Current.ApplicationInstance.CompleteRequest()
Catch ex As Exception
lMessage.Text = "Could not send email with attachment."
End Try
Else
lMessage.Text = "Must create and save a session in order send letter by email."
End If
End Sub
答案 0 :(得分:0)
您可以在服务器上运行单独的服务,您可以在其中发送要在队列中发送邮件的电子邮件ID,以便服务以异步方式处理该过程。
答案 1 :(得分:0)
查看Task.Factory以将此任务转移到另一个线程
example 那里有vbsamples
答案 2 :(得分:0)
您应该查看Producer / Consumer patterns in .Net,特别是在使用任务并行库时。
我建议使用模拟电子邮件内容(bc
)的类的共享(静态)BlockingCollection
(mailItem
)容器,由默认ConcurrentQueue
支持
在启动您的应用程序时,例如在Application.Start
的{{1}}中,放置当前global.asax
页面发送电子邮件的代码,但它只是循环遍历排队的邮件项目(如果没有,则会阻止力矩)。
后台工作线程看起来像:
Email.aspx
然后在需要对要发送的电子邮件进行排队的页面上
For Each mailItem In bc.GetConsumingEnumerable()
... send mail (Code from `Email.aspx`)
Next
当每个mailItem被放入队列时,后台线程将处理它。