私が取り組んでいるプロジェクトでは、クライアントが RSS フィードをサイトのニュース項目に結合したいと考えています。
このサイトには、データベースから取得した NewsItems によって入力されたニュース フィードが既にあります。
私の考えでは、RSS フィードを定期的に (約 20 分ごとに) 消費することですが、フィードが更新されているときにニュース ページを表示しようとするクライアントにこれがどのような影響を与えるかはわかりません。
私の考えは、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
}
}
}
}
問題を複雑にしすぎていませんか?
どんなアドバイスでも大歓迎です!