Review a generated pooled frame reader

from Span<T> and Memory<T>
C# 14 / .NET 10 advanced 10 min 4 issues to find

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

Open in playground
Report an error