public static async Task <int> WriteFileAsync <T>(SafeObjectHandle handle, ArraySegment <T> arraySegment, CancellationToken cancellationToken = default(CancellationToken)) where T : struct { using (var asFixed = new FixedArraySegment <T>(arraySegment)) { return(await WriteFileAsync(handle, asFixed.Pointer, asFixed.SizeInBytes, cancellationToken)); } }
public static async Task <ArraySegment <T> > ReadFileAsync <T>(SafeObjectHandle handle, int numberOfElementsToRead, CancellationToken cancellationToken = default(CancellationToken)) where T : struct { var buffer = new T[numberOfElementsToRead]; var segment = new ArraySegment <T>(buffer); using (var asFixed = new FixedArraySegment <T>(segment)) { var bytesRead = await ReadFileAsync(handle, asFixed.Pointer, asFixed.SizeInBytes, cancellationToken); var elementsRead = bytesRead / asFixed.ElementSize; return(new ArraySegment <T>(buffer, 0, elementsRead)); } }