我正在开发一个 Windows 8 Metro RSS Feed 应用程序。因此,我正在实施一个后台任务来检查是否有新的提要可用,如果有则通知用户。我这样做如下:
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-Feed,它不是 BackgroundTask(而不是在ThreadPool.RunAsync
lambda 表达式中),并且一切正常,因此该ThreadPool.RunAsync
方法可能会导致问题。