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

◆ WriteToUnderlyingStreamAsync()

async ValueTask System.IO.BufferedStream.WriteToUnderlyingStreamAsync ( ReadOnlyMemory< byte > buffer,
CancellationToken cancellationToken,
Task semaphoreLockTask )
inlineprivate

Definition at line 724 of file BufferedStream.cs.

725 {
726 await semaphoreLockTask.ConfigureAwait(continueOnCapturedContext: false);
727 try
728 {
729 if (_writePos == 0)
730 {
732 }
733 int num;
734 checked
735 {
736 num = _writePos + buffer.Length;
737 if (num + buffer.Length < _bufferSize + _bufferSize)
738 {
739 buffer = buffer.Slice(WriteToBuffer(buffer.Span));
740 if (_writePos >= _bufferSize)
741 {
742 await _stream.WriteAsync(new ReadOnlyMemory<byte>(_buffer, 0, _writePos), cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
743 _writePos = 0;
744 WriteToBuffer(buffer.Span);
745 }
746 return;
747 }
748 }
749 if (_writePos > 0)
750 {
751 if (num <= _bufferSize + _bufferSize && num <= 81920)
752 {
754 buffer.Span.CopyTo(new Span<byte>(_buffer, _writePos, buffer.Length));
755 await _stream.WriteAsync(new ReadOnlyMemory<byte>(_buffer, 0, num), cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
756 _writePos = 0;
757 return;
758 }
759 await _stream.WriteAsync(new ReadOnlyMemory<byte>(_buffer, 0, _writePos), cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
760 _writePos = 0;
761 }
762 await _stream.WriteAsync(buffer, cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
763 }
764 finally
765 {
767 }
768 }
void WriteToBuffer(byte[] buffer, ref int offset, ref int count)
Task WriteAsync(byte[] buffer, int offset, int count)
Definition Stream.cs:914
SemaphoreSlim _asyncActiveSemaphore
Definition Stream.cs:490
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226

References System.IO.Stream._asyncActiveSemaphore, System.IO.BufferedStream._buffer, System.IO.BufferedStream._bufferSize, System.IO.BufferedStream._stream, System.IO.BufferedStream._writePos, System.buffer, System.cancellationToken, System.IO.BufferedStream.ClearReadBufferBeforeWrite(), System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.IO.BufferedStream.EnsureShadowBufferAllocated(), System.Threading.SemaphoreSlim.Release(), System.IO.Stream.WriteAsync(), and System.IO.BufferedStream.WriteToBuffer().

Referenced by System.IO.BufferedStream.WriteAsync().