Windows 8MetroRSSフィードアプリを開発しています。したがって、新しいフィードが利用可能かどうかを確認し、利用できる場合はユーザーに通知するためのバックグラウンドタスクを実装しています。私はこれを次のように行います:
public sealed class UpdateCheck : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral backgroundTaskDeferral = taskInstance.GetDeferral();
await StartUpdateCheck();
backgroundTaskDeferral.Complete();
}
public IAsyncAction StartUpdateCheck()
{
return ThreadPool.RunAsync(async o =>
{
SyndicationClient client = new SyndicationClient();
SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri("http://.../feed.xml"));
ApplicationDataContainer applicationDataContainer = ApplicationData.Current.LocalSettings;
string lastFeedId = (string) applicationDataContainer.Values["LastFeedId"];
if (lastFeedId != feed.Items.First().Id)
{
// inform user
}
});
}
}
SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri("http://.../feed.xml"));
コードをデバッグしていて、 F10キーを押して行をステップオーバーしたい場合、何も起こりません。それ以降のコード行は実行されません。したがって、メソッドの前にブレークポイントを設定すると、RetrieveFeedAsync
ブレークポイントがヒットします。この行の後、ブレークポイントはヒットしません。
コード内の別の位置でRSSフィードを読んでいます。これはBackgroundTaskではなく(ThreadPool.RunAsync
ラムダ式ではありません)、すべてが正常に機能するため、ThreadPool.RunAsync
メソッドが問題を引き起こす可能性があります。