Почему Span<T>/ReadOnlySpan<T> — это ref struct, что это запрещает (heap/async/итераторы/лямбды), и как передавать “срезы” через async-границы?
ref struct → только стек: нельзя боксить, хранить в полях классов, захватывать в замыканиях, использовать в async/итераторах — их состояния живут в куче, что небезопасно для byref-типов. Используйте Span<T> локально и синхронно; создавайте через stackalloc, слайсинг O(1). Для перехода через async/долгоживущего хранения берите Memory<T>/ReadOnlyMemory<T>; по месту обратно получайте .Span. Нельзя возвращать/принимать Task<Span<T>>; нужно Task<Memory<T>>.
Почему Span<T>/ReadOnlySpan<T> — это ref struct, что это запрещает (heap/async/итераторы/лямбды), и как передавать “срезы” через async-границы?
ref struct → только стек: нельзя боксить, хранить в полях классов, захватывать в замыканиях, использовать в async/итераторах — их состояния живут в куче, что небезопасно для byref-типов. Используйте Span<T> локально и синхронно; создавайте через stackalloc, слайсинг O(1). Для перехода через async/долгоживущего хранения берите Memory<T>/ReadOnlyMemory<T>; по месту обратно получайте .Span. Нельзя возвращать/принимать Task<Span<T>>; нужно Task<Memory<T>>.
Telegram desktop app: In the upper left corner, click the Menu icon (the one with three lines). Select “New Channel” from the drop-down menu. Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. Click “Save” ; Telegram Android app: Open the chats list, click the menu icon and select “New Channel.” To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon.
from us