Exemplo n.º 1
0
        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;
            }
        }