public override Task Download() { return(Task.Run(async() => { var patch = await FetchPatch(); var fileList = await FetchPatchManifest(patch.PatchId); var rootUrl = string.Format(PatchRootFormat, patch.PatchId); await _downloader.StartDownload(rootUrl, fileList.Files); fileList.Files.GroupBy(f => f.HashGroup) .ForEach(group => { var hm = new HashManager(group.Key); hm.CreateIfMissing(); hm.Load(); foreach (var file in group) { hm.Put(file.FullFile, file.Hash); } hm.Save(); }); })); }