public static async Task <bool> GetUpdate()
        {
            TaskCompletionSource <bool> r = new TaskCompletionSource <bool>();
            string currentVersion         = VersionTracking.CurrentVersion;
            string result = CloudMusic.ApiHelper.HttpClient.HttpGet(url);

            if (!result.Equals("err"))
            {
                GitHubReleasesModel releasesModel = JsonConvert.DeserializeObject <GitHubReleasesModel>(result);
                string lastReleasesVersion        = releasesModel.tag_name;
                string IgnoreVersion = Preferences.Get("IgnoreVersion", "");
                if (lastReleasesVersion.Equals(IgnoreVersion))
                {
                    r.SetResult(false);
                    return(await r.Task);
                }
                string downloadurl = releasesModel.assets[0].browser_download_url;
                size = releasesModel.assets[0].size;
                bool hasupdate = ContainsVersion(currentVersion, lastReleasesVersion);
                if (hasupdate && Device.RuntimePlatform.Equals(Device.Android))
                {
                    Device.BeginInvokeOnMainThread(async() =>
                    {
                        try
                        {
                            string content = string.Format("{0}\r\n\r\n大小({1}MB)", releasesModel.body, ((double)size / 1024 / 1024).ToString("f2"));
                            if (await App.Current.MainPage.DisplayAlert("发现新版本" + lastReleasesVersion, content, "更新", "忽略此版本"))
                            {
                                DependencyService.Get <IToast>().ShortAlert("更新已在后台下载,请稍后");
                                System.Net.WebClient webClient     = new System.Net.WebClient();
                                webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
                                webClient.DownloadDataCompleted   += WebClient_DownloadDataCompleted;
                                byte[] data     = await webClient.DownloadDataTaskAsync(downloadurl);
                                string fileName = releasesModel.assets[0].name;
                                DependencyService.Get <IFileOpener>().OpenFile(data, fileName);
                            }
                            else
                            {
                                Preferences.Set("IgnoreVersion", lastReleasesVersion);
                            }
                        }
                        catch (Exception ex)
                        {
                            DependencyService.Get <IToast>().ShortAlert("更新下载失败:" + ex.Message);
                            DependencyService.Get <INotification>().NotificationCancel(1);
                        }
                    });
                }
                else
                {
                    r.SetResult(false);
                    return(await r.Task);
                }
            }
            r.SetResult(true);
            return(await r.Task);
        }
        public static async Task <bool> GetUpdate()
        {
            if (Connectivity.NetworkAccess == NetworkAccess.Internet &&
                Barrel.Current.IsExpired(key: url))
            {
                TaskCompletionSource <bool> r = new TaskCompletionSource <bool>();
                string currentVersion         = VersionTracking.CurrentVersion;
                var    service = Prism.PrismApplicationBase.Current.Container.Resolve <IRequestProvider>();
                GitHubReleasesModel releasesModel = await service.GetAsync <GitHubReleasesModel>(url);

                if (releasesModel != null && !string.IsNullOrEmpty(releasesModel.tag_name))
                {
                    string lastReleasesVersion = releasesModel.tag_name;
                    string IgnoreVersion       = Preferences.Get("IgnoreVersion", "");
                    if (lastReleasesVersion.Equals(IgnoreVersion))
                    {
                        r.SetResult(false);
                        return(await r.Task);
                    }
                    string downloadurl = releasesModel.assets[0].browser_download_url;
                    size = releasesModel.assets[0].size;
                    bool hasupdate = ContainsVersion(currentVersion, lastReleasesVersion);
                    if (hasupdate && Device.RuntimePlatform.Equals(Device.Android))
                    {
                        Device.BeginInvokeOnMainThread(async() =>
                        {
                            try
                            {
                                string content = string.Format("{0}\r\n\r\nSize({1}MB)", releasesModel.body, ((double)size / 1024 / 1024).ToString("f2"));
                                if (await App.Current.MainPage.DisplayAlert("New Version" + lastReleasesVersion, content, "Update", "Cancel"))
                                {
                                    DependencyService.Get <IDisplayMessage>().ShowMessageInfo("Update has been downloaded in the background, please wait");
                                    System.Net.WebClient webClient     = new System.Net.WebClient();
                                    webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
                                    webClient.DownloadDataCompleted   += WebClient_DownloadDataCompleted;
                                    byte[] data     = await webClient.DownloadDataTaskAsync(downloadurl);
                                    string fileName = releasesModel.assets[0].name;
                                    DependencyService.Get <IFileOpener>().OpenFile(data, fileName);
                                }
                                else
                                {
                                    Preferences.Set("IgnoreVersion", lastReleasesVersion);
                                }
                            }
                            catch (Exception ex)
                            {
                                DependencyService.Get <IDisplayMessage>().ShowMessageInfo("Update download failed:" + ex.Message);
                                DependencyService.Get <IProgressUpdate>().ProgressCancel(1);
                            }
                        });
                    }
                    else
                    {
                        r.SetResult(false);
                        return(await r.Task);
                    }
                }
                r.SetResult(true);
                //Saves the cache and pass it a timespan for expiration
                Barrel.Current.Add(key: url, data: r.Task, expireIn: TimeSpan.FromDays(1));
                return(await r.Task);
            }
            else
            {
                return(Barrel.Current.Get <bool>(key: url));
            }
        }