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

◆ ReadFileScatterAsync()

static unsafe ValueTask< int > System.IO.RandomAccess.ReadFileScatterAsync ( SafeFileHandle handle,
IntPtr segmentsPtr,
int bytesToRead,
long fileOffset,
CancellationToken cancellationToken )
inlinestaticprivate

Definition at line 623 of file RandomAccess.cs.

624 {
625 handle.EnsureThreadPoolBindingInitialized();
627 try
628 {
630 if (Interop.Kernel32.ReadFileScatter(handle, (long*)(void*)segmentsPtr, bytesToRead, IntPtr.Zero, ptr) == 0)
631 {
634 {
635 case 997:
636 overlappedValueTaskSource.RegisterForCancellation(cancellationToken);
637 break;
638 case 38:
639 case 109:
640 ptr->InternalLow = IntPtr.Zero;
642 return ValueTask.FromResult(0);
643 default:
645 return ValueTask.FromException<int>(Win32Marshal.GetExceptionForWin32Error(lastWin32ErrorAndDisposeHandleIfInvalid, handle.Path));
646 }
647 }
648 }
649 catch
650 {
652 throw;
653 }
654 overlappedValueTaskSource.FinishedScheduling();
656 }
static unsafe int ReadFileScatter(SafeHandle hFile, long *aSegmentArray, int nNumberOfBytesToRead, IntPtr lpReserved, NativeOverlapped *lpOverlapped)
static Memory< byte > long CancellationToken cancellationToken
static Memory< byte > long fileOffset
static int GetLastWin32ErrorAndDisposeHandleIfInvalid(SafeFileHandle handle)
static ValueTask FromException(Exception exception)
Definition ValueTask.cs:190

References System.IO.RandomAccess.cancellationToken, System.IO.RandomAccess.fileOffset, System.Threading.Tasks.ValueTask< TResult >.FromException(), System.IO.Win32Marshal.GetExceptionForWin32Error(), System.IO.Strategies.FileStreamHelpers.GetLastWin32ErrorAndDisposeHandleIfInvalid(), System.handle, Interop.Kernel32.ReadFileScatter(), and System.IntPtr.Zero.

Referenced by System.IO.RandomAccess.ReadScatterAtOffsetSingleSyscallAsync().