public async Task<string> DownloadReleasePackage(ReleaseInfo releaseInfo, Action<int> downloadProgressCallback,
CancellationToken cancellationToken) {
var destination = Path.Combine(Path.GetTempPath(), releaseInfo.Filename);
if (File.Exists(destination)) {
File.Delete(destination);
Thread.Sleep(100);
}
using (var webClient = new WebClient()) {
webClient.Headers.Add("Accept", "application/octet-stream");
if (downloadProgressCallback != null) {
webClient.DownloadProgressChanged += (sender, args) => downloadProgressCallback(args.ProgressPercentage);
}
cancellationToken.Register(webClient.CancelAsync);
await webClient.DownloadFileTaskAsync(releaseInfo.DownloadUrl, destination);
}
return destination;
}
}