1

我试图通过在退出页面之前发送电子邮件来避免等待时间。

页面/应用程序在退出之前执行一系列操作,如下所示:

  1. 数据库交互
  2. 发送电子邮件(向经理更新有关该交易的信息)
  3. 退出页面/应用程序。

函数背后的代码:

    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);
    
    
        }
    }
    
4

3 回答 3

3

只要您使用 C# 4.0,您就可以利用任务并行库sendMailNote(action)在后台线程中运行,如下所示:

Task.Factory.StartNew(() => sendMailNote(action));

只需确保添加代码来处理发送电子邮件期间发生的任何异常。然而,更好的解决方案是从用户界面代码中完全删除此逻辑,并在 Windows 服务或云工作者角色等后台任务中执行它。

于 2012-10-17T18:50:26.087 回答
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(...)
于 2012-10-17T18:55:53.167 回答
0

您可以将电子邮件信息保存到数据库中,并拥有一个实际发送邮件的后台 cron 作业。

于 2012-10-17T18:49:29.730 回答