Exemple #1
0
        private void ProduceTask()
        {
            using var reader = new StreamReader(_fileName);
            while (true)
            {
                IMemoryOwner <char> lease = MemoryPool <char> .Shared.Rent(_bufferSize);

                int ret = reader.Read(lease.Memory.Span);
                if (ret >= _bufferSize)
                {
                    _blocks.Add(lease);
                }
                else// last chunk => compute sum directly here
                {
                    _blocks.CompleteAdding();
                    var sum = DigitsSummer.SumVx2A(lease.Memory.Span.Slice(0, ret));
                    Interlocked.Add(ref _result, sum);
                    lease.Dispose();
                    break;
                }
            }
        }