コード例 #1
0
        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();
            }
        }