Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ReadFromUnderlyingStreamAsync()

async ValueTask< int > System.IO.BufferedStream.ReadFromUnderlyingStreamAsync ( Memory< byte > buffer,
CancellationToken cancellationToken,
int bytesAlreadySatisfied,
Task semaphoreLockTask )
inlineprivate

Definition at line 502 of file BufferedStream.cs.

503 {
504 await semaphoreLockTask.ConfigureAwait(continueOnCapturedContext: false);
505 try
506 {
507 int num = ReadFromBuffer(buffer.Span);
508 if (num == buffer.Length)
509 {
510 return bytesAlreadySatisfied + num;
511 }
512 if (num > 0)
513 {
514 buffer = buffer.Slice(num);
515 bytesAlreadySatisfied += num;
516 }
517 _readPos = (_readLen = 0);
518 if (_writePos > 0)
519 {
520 await FlushWriteAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
521 }
522 if (buffer.Length >= _bufferSize)
523 {
524 return await _stream.ReadAsync(buffer, cancellationToken).ConfigureAwait(continueOnCapturedContext: false) + bytesAlreadySatisfied;
525 }
527 _readLen = await _stream.ReadAsync(new Memory<byte>(_buffer, 0, _bufferSize), cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
528 num = ReadFromBuffer(buffer.Span);
529 return bytesAlreadySatisfied + num;
530 }
531 finally
532 {
534 }
535 }
async ValueTask FlushWriteAsync(CancellationToken cancellationToken)
int ReadFromBuffer(byte[] buffer, int offset, int count)
Task< int > ReadAsync(byte[] buffer, int offset, int count)
Definition Stream.cs:762
SemaphoreSlim _asyncActiveSemaphore
Definition Stream.cs:490
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
ConfiguredValueTaskAwaitable ConfigureAwait(bool continueOnCapturedContext)
Definition ValueTask.cs:312

References System.IO.Stream._asyncActiveSemaphore, System.IO.BufferedStream._buffer, System.IO.BufferedStream._bufferSize, System.IO.BufferedStream._readLen, System.IO.BufferedStream._readPos, System.IO.BufferedStream._stream, System.IO.BufferedStream._writePos, System.buffer, System.cancellationToken, System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.Threading.Tasks.ValueTask< TResult >.ConfigureAwait(), System.IO.BufferedStream.EnsureBufferAllocated(), System.IO.BufferedStream.FlushWriteAsync(), System.IO.Stream.ReadAsync(), System.IO.BufferedStream.ReadFromBuffer(), and System.Threading.SemaphoreSlim.Release().

Referenced by System.IO.BufferedStream.ReadAsync(), and System.IO.BufferedStream.ReadAsync().