我试图通过发送电子邮件来避免等待时间 在退出页面之前。
页面/应用程序在退出之前执行一系列操作,如下所示:
功能背后的代码:
ExecEntryOnTbl(SQL);// <-- update / insert to database
sendMailNote(action);// <-- send mail with notification of update
exitTC(action, custid);<-- exit page.
done via javascript :
window.location.href = "someOtherPage.aspx"
from code behind via
RegisterClientScriptBlock(...)
我想解决这个问题:
我怎样才能避免等待sendMailNote()
完成
在执行exitTC()
之前。那可能吗?
更新电子邮件类/方法
public static class mail
{
public static string aReciver, bSubject, cBody;
public static void sendMailNoteExc()
{
string SmtpServer = "smtp.gmail.com";
int port = 111;
string sender = "aaa@bbb.com";
string ReCiver = aReciver;
string Subject = bSubject;
string Body = cBody;
string account = "acc@domain.com";
string Pass = "a123456";
Send(SmtpServer, port, account, Pass, sender, ReCiver, Subject, Body);
}
public static void Send(string smtpServer,int Port,string Account, string PassWord, string From, string To, string Subject, string Body)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient(smtpServer);
mail.From = new MailAddress(From);
mail.To.Add(To);
mail.Subject = Subject;
mail.Body = Body;
SmtpServer.Port = Port;
SmtpServer.Credentials = new System.Net.NetworkCredential(Account, PassWord);
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
}
答案 0 :(得分:3)
只要您使用的是C#4.0,就可以利用Task Parallel Library并在后台线程中运行sendMailNote(action)
,如下所示:
Task.Factory.StartNew(() => sendMailNote(action));
请确保添加代码以处理发送电子邮件期间发生的任何异常。但是,更好的解决方案是从用户界面代码中完全删除此逻辑,并在后台任务(如Windows服务或云工作者角色)中执行它。
答案 1 :(得分:2)
在另一个帖子中执行。因此,您的主线程将不会等待电子邮件发送。
ExecEntryOnTbl(SQL);// <-- update / insert to database
ThreadStart sendMail = delegate()
{
sendMailNote(action)
};
Thread thread = new Thread(sendMail );
thread.IsBackground = true;
thread.Start();
exitTC(action, custid);<-- exit page.
done via javascript :
window.location.href = "someOtherPage.aspx"
from code behind via
RegisterClientScriptBlock(...)
答案 2 :(得分:0)
您可以将电子邮件信息保留到数据库,并拥有实际发送邮件的后台cron作业。