Javascript 在不等待操作完成执行的情况下发送电子邮件

Javascript 在不等待操作完成执行的情况下发送电子邮件,javascript,asp.net,c#-4.0,sendmail,Javascript,Asp.net,C# 4.0,Sendmail,我试图通过发送电子邮件来避免等待时间 在退出页面之前 页面/应用程序在退出之前正在执行一系列操作,如下所示: 数据库交互 发送电子邮件(向经理更新有关该交易的信息) 退出页面/应用程序 代码隐藏功能: ExecEntryOnTbl(SQL);// <-- update / insert to database sendMailNote(action);// <-- send mail with notification of update exitTC(

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

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

  • 数据库交互
  • 发送电子邮件(向经理更新有关该交易的信息)
  • 退出页面/应用程序
  • 代码隐藏功能:

        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(...)
    

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

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

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

    Task.Factory.StartNew(() => sendMailNote(action));
    
    只需确保您添加了一个代码来处理发送电子邮件期间发生的任何异常。但是,更好的解决方案是从用户界面代码中完全删除此逻辑,并在后台任务(如windows服务或云工作者角色)中执行它。

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

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

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

    在另一个线程中执行。因此,您的主线程将不会等待电子邮件发送

    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(...)
    

    ExecEntryOnTbl(SQL);// 在另一个线程中执行。因此,您的主线程将不会等待电子邮件发送

    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(...)
    

    ExecEntryOnTbl(SQL);//你能举个简单的例子说明你是怎么做的吗?我将向你展示我正在使用的“实际发送邮件”功能,听起来很有趣(更新帖子)。你能举一个简短的例子说明你是如何做到的吗?我将向您展示我正在使用的实际发送邮件功能,听起来很有趣(更新帖子)您是否看到最后一个答案
    @Ehsan Aleem Avee
    是否有必要指定任务属性以使其按指定的方式运行?或者他使用的是完全不同的类/方法?两个答案背后的想法是相同的,但他正在使用一个更低级的API来使用后台线程。如果您能够使用TPL,那么我建议您这样做,因为它使用.NET Framework线程池而不是创建新线程时,使用起来更容易,工作速度更快。您是否看到最后一个答案
    @Ehsan Aleem Avee
    是否有必要指定任务属性以使其按指定的方式运行?或者这是完全不同的类/他正在使用的方法?两个答案背后的想法是相同的,但他正在使用一个更低级的API来使用后台线程。如果您能够使用TPL,那么我建议您这样做,因为它使用.NET Framework线程池而不是创建新线程时更易于使用,而且工作速度更快。谢谢,与我认为正确的答案有什么区别吗(它只是工作)您的代码尝试设置线程属性。。。etc或您在使用c#4.0I时没有考虑使用可用的
    任务并行
    ,我不了解Task.Factory.StartNew功能。但我认为它也创建了一个新线程,以异步方式完成任务..谢谢,我认为正确的答案(它只是工作)与您的代码尝试设置线程属性的答案有什么区别吗。。。etc或您在使用c#4.0I时没有考虑使用可用的
    任务并行
    ,我不了解Task.Factory.StartNew功能。但我认为它也创建了一个新线程,以异步方式完成这项工作。。