2010-06-08 73 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