private async Task WriteFile(string url, IProgress <int> progressReporter) { try { using (var fs = FileWrapper.OpenWrite(url)) { while (await Buffer.OutputAvailableAsync(CancellationTokenSource.Token)) { await PauseTokenSource.Token.WaitWhilePausedAsync(CancellationTokenSource.Token); var segment = await Buffer.GetFilledSegmentAsync(CancellationTokenSource.Token); await fs.WriteAsync(segment.Array, segment.Offset, segment.Count, CancellationTokenSource.Token); progressReporter.Report(segment.Count); await Buffer.FreeSegmentAsync(segment, CancellationTokenSource.Token); } } } catch (Exception) { DeleteIfExists(url); throw; } }