2010-06-08 58 views
0

我尝试这样做:如何在asp.net mvc 2中运行异步代码?

BackgroundWorker bw = new BackgroundWorker(); 

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

    bw.RunWorkerAsync(); 

,但没有奏效。 SendConfEmail需要一段时间才能运行。我想这是因为BackgroundWorker是为winforms而不是webforms设计的。

任何想法如何我可以解决这个问题?

回答

0

我最终通过使用AsyncCallback对象解决了它。

一个集中的邮件服务器解决方案将是理想的,但这个项目是一个时间关键的概念证明,必须在短短五天内完成。

1

等待后台线程获取某个请求中排队CPU上的将是近毫无意义的。你应该从所有线程排列你的电子邮件,并从一个单独的进程或从专门的线程内派生出来,比如在global.asax中。

+0

为什么没有意义?我希望为用户显示确认页面,而不需要5秒的时间来发送电子邮件。 – NibblyPig 2010-06-08 10:19:32

+0

@slc它毫无意义,因为您正尝试在重度线程化的应用程序中产生后台线程。强调“背景”。在加载时,你会发现你的后台线程不会很安排。另外,添加实际发送电子邮件所需的不确定时间,并且可能有更多的等待时间少于一秒。考虑其他设计的可能性。您可以将其排队,并立即返回到等待页面,该页面每隔10秒回传一次,直到看到您的电子邮件已发送。它是一种常见的模式,并有很好的理由。 – Will 2010-06-08 11:46:18

+0

@slc也是,“BackgroundWorker专为winforms而不是webforms。”不完全的。 BW使用后台线程,因此它们的CPU时间比IIS中的线程少得多。重申我上面的陈述。顺便说一句,如果你想阻止响应,直到电子邮件发送,所以你可以显示确认页面,为什么使用后台线程呢? – Will 2010-06-08 11:49:22