public void StartDownload(CancellationToken cancellationToken) { Task.Run(() => { if (ProgressMaximum < 100 * FileSize.MebiByte) { DownloadedStream = new MemoryStream(); MemoryAnalyzer.AddTrackedMemoryItem(@"NXM Download MemoryStream", new WeakReference(DownloadedStream)); } else { DownloadedStream = new FileStream(Path.Combine(Utilities.GetModDownloadCacheDirectory(), ModFile.FileName), FileMode.Create); MemoryAnalyzer.AddTrackedMemoryItem(@"NXM Download FileStream", new WeakReference(DownloadedStream)); } var downloadUri = DownloadLinks[0].Uri; var downloadResult = OnlineContent.DownloadToStream(downloadUri.ToString(), OnDownloadProgress, null, true, DownloadedStream, cancellationToken); if (downloadResult.errorMessage != null) { DownloadedStream?.Dispose(); if (cancellationToken.IsCancellationRequested) { // Aborted download. } else { Log.Error($@"Download failed: {downloadResult.errorMessage}"); OnModDownloadError?.Invoke(this, downloadResult.errorMessage); } // Download didn't work! Analytics.TrackEvent(@"NXM Download", new Dictionary <string, string>() { { @"Domain", domain }, { @"File", ModFile?.Name }, { @"Result", $@"Failed, {downloadResult.errorMessage}" }, }); } else { Analytics.TrackEvent(@"NXM Download", new Dictionary <string, string>() { { @"Domain", domain }, { @"File", ModFile?.Name }, { @"Result", @"Success" }, }); } Downloaded = true; OnModDownloaded?.Invoke(this, new DataEventArgs(DownloadedStream)); }); }