public void Import(IBuffer buffer, IBuffer lastBuffer)
        {
            Interlocked.Add(ref _length, buffer.TotalBufferLength);
            bufferQueue.Enqueue(Tuple.Create(buffer, lastBuffer));

            if (_readCompletionSource != null)
            {
                int len = Read(_readCompletionSource.Buffer, _readCompletionSource.Offset, _readCompletionSource.Count);
                _readCompletionSource.TrySetResult(len);
                _readCompletionSource = null;
            }
        }
Beispiel #2
0
 public override Task <int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
 {
     if (!SSLConfirmed && SSL)
     {
         return(base.ReadAsync(buffer, offset, count, cancellationToken));
     }
     else
     {
         if (Length > 0)
         {
             readCompletionSource = null;
             var len = Read(buffer, offset, count);
             return(Task.FromResult(len));
         }
         else
         {
             readCompletionSource        = new ReadTaskCompletionSource();
             readCompletionSource.Buffer = buffer;
             readCompletionSource.Offset = offset;
             readCompletionSource.Count  = count;
             return(readCompletionSource.Task);
         }
     }
 }
 public Task <int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
 {
     if (Length > 0)
     {
         _readCompletionSource = null;
         var len = Read(buffer, offset, count);
         return(Task.FromResult(len));
     }
     else
     {
         _readCompletionSource = new ReadTaskCompletionSource
         {
             Buffer = buffer,
             Offset = offset,
             Count  = count
         };
         cancellationToken.Register(() =>
         {
             _readCompletionSource.TrySetCanceled(cancellationToken);
             _readCompletionSource = null;
         });
         return(_readCompletionSource.Task);
     }
 }