private static async Task <long> FlushBackend(BackupResults result, IWriteChannel <Backup.IUploadRequest> uploadtarget, Task uploader) { var flushReq = new Backup.FlushRequest(); // Wait for upload completion result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_WaitForUpload); await uploadtarget.WriteAsync(flushReq).ConfigureAwait(false); await uploader.ConfigureAwait(false); // Grab the size of the last uploaded volume return(await flushReq.LastWriteSizeAsync); }
private async Task WaitForWorkers(List <Worker> workers, FlushRequest flush) { while (workers.Any()) { Task finishedTask = await Task.WhenAny(workers.Select(w => w.Task)).ConfigureAwait(false); if (finishedTask.IsFaulted) { flush.TrySetCanceled(); ExceptionDispatchInfo.Capture(finishedTask.Exception).Throw(); } Worker finishedWorker = workers.Single(w => w.Task == finishedTask); workers.Remove(finishedWorker); finishedWorker.Dispose(); } }