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

◆ ReadAsync() [3/3]

override ValueTask< int > System.IO.Strategies.BufferedFileStreamStrategy.ReadAsync ( Memory< byte > buffer,
CancellationToken cancellationToken = default(CancellationToken) )
inlinevirtual

Reimplemented from System.IO.Stream.

Definition at line 620 of file BufferedFileStreamStrategy.cs.

621 {
622 if (cancellationToken.IsCancellationRequested)
623 {
625 }
627 if (!_strategy.CanSeek)
628 {
630 }
632 Task task = semaphoreSlim.WaitAsync(cancellationToken);
633 if (task.IsCompletedSuccessfully && _writePos == 0)
634 {
635 bool flag = true;
636 try
637 {
638 if (_readLen == _readPos && buffer.Length >= _bufferSize)
639 {
641 }
642 if (_readLen - _readPos >= buffer.Length)
643 {
644 _buffer.AsSpan(_readPos, buffer.Length).CopyTo(buffer.Span);
645 _readPos += buffer.Length;
646 return new ValueTask<int>(buffer.Length);
647 }
648 flag = false;
649 }
650 finally
651 {
652 if (flag)
653 {
654 semaphoreSlim.Release();
655 }
656 }
657 }
659 }
ValueTask< int > ReadAsyncSlowPath(Task semaphoreLockTask, Memory< byte > buffer, CancellationToken cancellationToken)
async ValueTask< int > ReadFromNonSeekableAsync(Memory< byte > destination, CancellationToken cancellationToken)
Task< int > ReadAsync(byte[] buffer, int offset, int count)
Definition Stream.cs:762
SemaphoreSlim EnsureAsyncActiveSemaphoreInitialized()
Definition Stream.cs:535
static ValueTask FromCanceled(CancellationToken cancellationToken)
Definition ValueTask.cs:180

References System.IO.Strategies.BufferedFileStreamStrategy._buffer, System.IO.Strategies.BufferedFileStreamStrategy._bufferSize, System.IO.Strategies.BufferedFileStreamStrategy._readLen, System.IO.Strategies.BufferedFileStreamStrategy._readPos, System.IO.Strategies.BufferedFileStreamStrategy._strategy, System.IO.Strategies.BufferedFileStreamStrategy._writePos, System.buffer, System.cancellationToken, System.IO.Stream.CanSeek, System.IO.Stream.EnsureAsyncActiveSemaphoreInitialized(), System.IO.Strategies.BufferedFileStreamStrategy.EnsureCanRead(), System.Threading.Tasks.ValueTask< TResult >.FromCanceled(), System.IO.Stream.ReadAsync(), System.IO.Strategies.BufferedFileStreamStrategy.ReadAsyncSlowPath(), System.IO.Strategies.BufferedFileStreamStrategy.ReadFromNonSeekableAsync(), System.Threading.SemaphoreSlim.Release(), System.task, and System.Threading.SemaphoreSlim.WaitAsync().