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 に答える