在我正在處理的項目中,客戶想要將RSS訂閱源合併到他們的網站新聞項目中。異步處理使用MVC的RSS訂閱源
該網站已經有一個由數據庫中提取的NewsItems填充的新聞訂閱源。
我的想法是定期(每20分鐘左右)使用rss訂閱源,但我不確定在訂閱源更新時試圖查看新聞頁面的客戶端會產生什麼樣的影響。
我的想法是使用ThreadPool.QueueUserWorkItem消耗飼料,處理它,並添加新的項目到數據庫/ lucene索引/添加標籤等,但我的異步編程經驗幾乎爲零。
QueueUserWorkItem會生成一個新的線程來執行工作而不會阻塞客戶端線程嗎?更新結束後會發生什麼?
我的想法做這樣的:
public class ExternalRSS
{
private readonly SettingsDTO Settings;
public ExternalRSS()
{
Settings = Application.FetchSettings();
RunAsynchronously(ProcessFeed);
}
public static void RunAsynchronously(Action method)
{
ThreadPool.QueueUserWorkItem(i =>
{
try
{
method();
}
catch (ThreadAbortException ex) { /*log*/}
catch (Exception ex){/*log*/}
});
}
private void ProcessFeed()
{
if(Settings != null)
{
using (var reader = XmlReader.Create(Settings.FacebookRssFeed))
{
var rssData = SyndicationFeed.Load(reader);
//do processing etc
}
}
}
}
難道我對這個問題複雜化?
任何意見將受到歡迎!
嗨達林,我確實考慮過在外部做這件事,但它會使事情稍微複雜化(獲得創建此類任務的權限等)。我會和客戶談談,看看他們能否爲我解決這個問題。 – 2012-07-19 15:11:09
嗯,我得到了客戶爲該網站購買VPS,所以現在我有充分的權限來做我所需要的 - 所以這段代碼將作爲一個服務箱運行。 – 2012-07-23 08:10:31