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

◆ ReadAsyncInternal()

Task< int > System.IO.Strategies.Net5CompatFileStreamStrategy.ReadAsyncInternal ( Memory< byte > destination,
CancellationToken cancellationToken,
out int synchronousResult )
inlineprivate

Definition at line 955 of file Net5CompatFileStreamStrategy.cs.

956 {
957 if (!CanRead)
958 {
959 ThrowHelper.ThrowNotSupportedException_UnreadableStream();
960 }
961 if (!_fileHandle.CanSeek)
962 {
963 if (_readPos < _readLength)
964 {
965 int num = Math.Min(_readLength - _readPos, destination.Length);
966 new Span<byte>(GetBuffer(), _readPos, num).CopyTo(destination.Span);
967 _readPos += num;
968 synchronousResult = num;
969 return null;
970 }
971 synchronousResult = 0;
973 }
974 if (_writePos > 0)
975 {
977 }
978 if (_readPos == _readLength)
979 {
980 if (destination.Length < _bufferLength)
981 {
982 Task<int> task = ReadNativeAsync(new Memory<byte>(GetBuffer()), 0, cancellationToken);
983 _readLength = task.GetAwaiter().GetResult();
984 int num2 = Math.Min(_readLength, destination.Length);
985 new Span<byte>(GetBuffer(), 0, num2).CopyTo(destination.Span);
986 _readPos = num2;
987 synchronousResult = num2;
988 return null;
989 }
990 _readPos = 0;
991 _readLength = 0;
992 synchronousResult = 0;
994 }
995 int num3 = Math.Min(_readLength - _readPos, destination.Length);
996 new Span<byte>(GetBuffer(), _readPos, num3).CopyTo(destination.Span);
997 _readPos += num3;
998 if (num3 == destination.Length)
999 {
1000 synchronousResult = num3;
1001 return null;
1002 }
1003 _readPos = 0;
1004 _readLength = 0;
1005 synchronousResult = 0;
1006 return ReadNativeAsync(destination.Slice(num3), num3, cancellationToken);
1007 }
unsafe Task< int > ReadNativeAsync(Memory< byte > destination, int numBufferedBytesRead, CancellationToken cancellationToken)

References System.IO.Strategies.Net5CompatFileStreamStrategy._bufferLength, System.IO.Strategies.Net5CompatFileStreamStrategy._fileHandle, System.IO.Strategies.Net5CompatFileStreamStrategy._readLength, System.IO.Strategies.Net5CompatFileStreamStrategy._readPos, System.IO.Strategies.Net5CompatFileStreamStrategy._writePos, System.cancellationToken, System.IO.Strategies.Net5CompatFileStreamStrategy.CanRead, Microsoft.Win32.SafeHandles.SafeFileHandle.CanSeek, System.Span< T >.CopyTo(), System.destination, System.IO.Strategies.Net5CompatFileStreamStrategy.FlushWriteBuffer(), System.IO.Strategies.Net5CompatFileStreamStrategy.GetBuffer(), System.Math.Min(), System.IO.Strategies.Net5CompatFileStreamStrategy.ReadNativeAsync(), System.task, and System.ThrowHelper.ThrowNotSupportedException_UnreadableStream().

Referenced by System.IO.Strategies.Net5CompatFileStreamStrategy.ReadAsync(), and System.IO.Strategies.Net5CompatFileStreamStrategy.ReadAsyncTask().