Asp.net mvc 2 如何在asp.net mvc 2中运行异步代码?

Asp.net mvc 2 如何在asp.net mvc 2中运行异步代码?,asp.net-mvc-2,Asp.net Mvc 2,我试过这个: BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (o, e) => { SendConfEmail(); }; bw.RunWorkerAsync(); 但它不起作用。SendMail需要一段时间才能运行。我想这是因为BackgroundWorker是为winforms而不是webforms设计的 有什么办法可以解决这个问题吗?等待后台线程从请求中

我试过这个:

    BackgroundWorker bw = new BackgroundWorker();

    bw.DoWork += (o, e) =>
    {
        SendConfEmail();
    };

   bw.RunWorkerAsync();
但它不起作用。SendMail需要一段时间才能运行。我想这是因为BackgroundWorker是为winforms而不是webforms设计的


有什么办法可以解决这个问题吗?

等待后台线程从请求中排队到CPU上几乎毫无意义。您可能应该将来自所有线程的电子邮件排队,并从一个单独的进程中为它们提供服务,或者从一个专门的线程中为它们提供服务,比如说,在global.asax中。

我最终通过使用AsyncCallback对象解决了这个问题


集中式邮件服务器解决方案是理想的,但该项目是一个时间紧迫的概念验证,必须在五天内完成。

为什么它毫无意义?我希望为用户显示确认页面,而不需要电子邮件发送所需的5秒延迟。@slc它毫无意义,因为您正试图在一个线程较多的应用程序中生成一个后台线程。强调“背景”。在加载时,您将发现您的后台线程根本不会得到调度。另外,加上实际发送电子邮件所需的不确定时间,您的等待时间不到一秒,可能会更长。考虑其他设计可能性。您可以将其排队,并立即返回等待页面,该页面每10秒发回一次,直到它看到您的电子邮件已发送。这是一种常见的模式,有很好的理由。@slc还说,“BackgroundWorker是为winforms而不是webforms设计的。”不完全是这样。BW使用后台线程,因此它们获得的CPU时间比IIS中的线程少得多。这是我上面的陈述。顺便说一句,如果你想在邮件发送前阻止回复,以便显示确认页面,那么为什么要使用后台线程呢?