ref
и unsafe
в итераторах и асинхронных методах.📌 Мотивация
В современном мире вы не можете сделать так:
async Task MyMethodAsync()
{
await AnAsyncMethod();
ref int x = ref GetRef();
DoSomething(ref x);
await AnohterAsnycMethod();
}
Проблема с
await
и ref
заключается в том, что компилятор не может гарантировать, что ссылка все еще будет действительна после выполнения await
. Но в данном случае это не должно быть проблемой, так как x
используется только между двумя вызовами await
, где ссылка все еще действительна.То же самое относится к
ref
структурам, таким как Span<T>
или ReadOnlySpan<T>
. Их нельзя использовать в итераторах (yield
) или асинхронных методах.Предложение как раз и позволит это делать:
async Task MyMethodAsync()
{
var result = await AnAsyncMethod();
ReadOnlySpan<char> span = result.AsSpan();
DoSomething(span);
await AnohterAsnycMethod();
}
#proposal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7🤔5❤4🥱3