Библиотека шарписта | C#, F#, .NET, ASP.NET
22.9K subscribers
2.26K photos
36 videos
85 files
4.43K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
👀 C# 13 может скоро получить новую фичу, которая позволит использовать 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🤔54🥱3