我正在开发一个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
}
});
}
}
当我调试代码并且我想通过点击F10跳过SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri("http://.../feed.xml"));
行时,没有任何反应。进一步的代码行不会被执行。因此,当我在 RetrieveFeedAsync
方法之前设置断点时,断点就会被击中。 在这一行之后,没有任何断点被击中。
我正在阅读代码中另一个位置的RSS-Feeds,它不是BackgroundTask(而不是ThreadPool.RunAsync
lambda表达式)并且一切正常,所以ThreadPool.RunAsync
方法可能会导致问题。
答案 0 :(得分:1)
后台任务中不需要ThreadPool.RunAsync,它已经在一个单独的线程中运行。