Exemplo n.º 1
0
        /// <summary>
        /// 升级缓存
        /// </summary>
        /// <param name="channels">需要缓存的页面列表</param>
        /// <returns></returns>
        private async Task AddCachePage(params CustomPage[] pages)
        {
            var list        = pages.Distinct().ToArray();
            var localFolder = ApplicationData.Current.LocalFolder;
            var file        = await localFolder.CreateFileAsync("CachePageList.json", CreationCollisionOption.OpenIfExists);

            string content = await FileIO.ReadTextAsync(file);

            if (string.IsNullOrEmpty(content))
            {
                content = "[]";
            }
            var results = JsonConvert.DeserializeObject <List <CacheModel> >(content);
            var tasks   = new List <Task>();

            if (list.Length > 0)
            {
                foreach (var page in list)
                {
                    tasks.Add(Task.Run(async() =>
                    {
                        var articles = await AppTools.GetSchemaFromPage(page, true);
                        int now      = AppTools.DateToTimeStamp(DateTime.Now.ToLocalTime());
                        if (results.Any(p => p.Page.Id == page.Id))
                        {
                            var target       = results.Where(p => p.Page.Id == page.Id).First();
                            target.Feeds     = articles;
                            target.CacheTime = now;
                        }
                        else
                        {
                            results.Add(new CacheModel()
                            {
                                Page = page, Feeds = articles, CacheTime = now
                            });
                        }
                    }));
                }
                try
                {
                    await Task.WhenAll(tasks.ToArray());
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                }
                finally
                {
                    content = JsonConvert.SerializeObject(results);
                    await FileIO.WriteTextAsync(file, content);
                }
            }
        }