public async Task UploadToB2() { IDictionary <string, FileObject> dbFileObjects = B2Db.GetDbFileObjects(); if (UploadList.Count == 0) { Log.Information("No local changes | Nothing to upload."); return; } Log.Information("Upload started"); Log.Information("Total files to upload = {0}", UploadList.Count); Stopwatch stopWatch = Stopwatch.StartNew(); int currentIndex = 0; await UploadList.ForEachAsync(Environment.ProcessorCount, async uploadObject => { try { // reset progress bar // progressLastLength = 0; // progressSpeedAverage.Clear(); // for (short i = 0; i<8; i++) progressSpeedAverage.Enqueue(0); // progressLastUpdate = DateTime.Now; B2File file = null; string b2Path = Utils.GetB2Filename(uploadObject.FileObject.FilePath, uploadObject.ParentPath, uploadObject.B2Path); string contentType = MimeTypeMap.GetMimeType(Path.GetExtension(uploadObject.FileObject.FilePath)); Log.Verbose("File = {0} | B2 Path = {1}", uploadObject.FileObject.FilePath, "/" + b2Path); FileInfo fileInfo = new FileInfo(uploadObject.FileObject.FilePath); if (fileInfo.Length < (1024 * 1024 * 100)) // more than 50MB { file = await UploadSmallFile(uploadObject, b2Path, contentType); } else { file = await UploadLargeFile(uploadObject, b2Path, contentType); } if (file != null) { uploadObject.FileObject.B2Files.Add(file.FileId, file); uploadObject.FileObject.DateModified = DateTime.Now; await B2Db.UpdateFileObject(uploadObject.FileObject); } Console.Write("Progress = {2}% [{0}/{1}]\t\t\t\r", ++currentIndex, UploadList.Count, Math.Round((Convert.ToDouble(currentIndex) / Convert.ToDouble(UploadList.Count)) * 100)); } catch (Exception) { RetryList.Add(uploadObject); Log.Error("Error file = {0}", uploadObject.FileObject.FilePath); } }); Log.Information("Upload finished | Execution time = {0} seconds | Error = {1}", stopWatch.Elapsed.TotalSeconds, RetryList.Count); }