在我正在进行的一个项目中,客户希望将 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
}
}
}
}
我是不是把问题复杂化了?
任何建议都会受到欢迎!