Review this generated helper against the buffer-lifetime contract.
Fill a rented buffer asynchronously, expose exactly the initialized bytes, prevent stale-data disclosure, and keep the result valid until its consumer finishes.
csharp
using System;
using System.Buffers;
using System.Threading.Tasks;
public static class FrameReader
{
public static async Task<ReadOnlyMemory<byte>> ReadAsync(
int requested,
Func<Memory<byte>, Task<int>> fill)
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(requested);
try
{
int written = await fill(buffer);
Memory<byte> result = buffer;
return result;
}
finally
{
ArrayPool<byte>.Shared.Return(buffer);
}
}
}
generated code is illustrative, not from any one model