コード例 #1
0
        public async Task Process(CancellationToken cancellationToken)
        {
            var processorsCount = Environment.ProcessorCount;
            var channel         = Channel.CreateBounded <Task <byte[]> >(processorsCount);
            var fileParts       = _fileSource.ReadByPartsAsync(_partSize);

            var processing = Task.Run(async() =>
            {
                var channelWriter = channel.Writer;
                await foreach (var part in fileParts)
                {
                    var compressedPartTask = Task.Run(() =>
                    {
                        var compressedPart = ProcessPart(part);
                        return(compressedPart);
                    }, cancellationToken);
                    await channelWriter.WriteAsync(compressedPartTask, cancellationToken);
                }
                channelWriter.Complete();
            }, cancellationToken);

            await WriteByParts(channel.Reader, cancellationToken);
        }