private async Task ReadFile(string url, IProgress <int> progressReporter) { try { using (var fs = FileWrapper.OpenRead(url)) { var bytesRead = 0; do { await PauseTokenSource.Token.WaitWhilePausedAsync(CancellationTokenSource.Token); var segment = await Buffer.GetEmptySegmentAsync(CancellationTokenSource.Token); bytesRead = await fs.ReadAsync(segment.Array, segment.Offset, segment.Count, CancellationTokenSource.Token); progressReporter.Report(bytesRead); await Buffer.FillSegmentAsync(segment, bytesRead, CancellationTokenSource.Token); } while (bytesRead > 0); } } finally { Buffer.CompleteAdding(); } }