В C# 13 Разрешат ref и unsafe в Итераторах и Асинхронном Коде
Сейчас вы не можете написать так:
async Task MyMethodAsync()
{
await AnAsyncMethod();
ref int x = ref GetRef();
DoSomething(ref x);
await AnohterAsnycMethod();
}
Проблема совместного использования await и ref заключается в том, что компилятор не может гарантировать, что ссылка по-прежнему будет действительна после await. Но в приведённом выше случае это не должно быть проблемой, поскольку x используется только между двумя вызовами await, где ссылка всё ещё действительна.
То же самое относится и к ссылочным структурам, таким как Span<T> или ReadOnlySpan<T>. Вы не можете использовать их в итераторах (yield) или асинхронных методах. Предложение позволит писать так:
async Task MyMethodAsync()
{
var result = await AnAsyncMethod();
var span = result.AsSpan();
DoSomething(span);
await AnohterAsnycMethod();
}
Подробности предложения здесь.
Источник: https://steven-giesel.com/blogPost/0d4216e5-4445-48c4-8d9c-3ff5aa1bfdc3/c-13-allow-ref-and-unsafe-in-iterators-and-async