Я прочитал несколько статей о Span<T>
(и ReadOnlySpan<T>
) и о том, как их нельзя использовать в асинхронных c методах.
Было отличное видео Chanel 9 Джареда Парсонса, где он показал следующий пример:
static async Task<bool> IsCSharpIdentifierAsync(Memory<char> memory, StreamReader reader)
{
var count = await reader.ReadAsync(memory);
return IsCSharpIdentifier(memory.Span.Slice(0, count));
}
static bool IsCSharpIdentifier(ReadOnlySpan<char> value)
{
....
}
Итак, общий поток может быть асинхронным, но все в порядке, если мы вызываем синхронный метод, который использует Span.
Теперь у меня мало или вообще никаких знаний о компиляции, но я понимаю, что компилятор может (в определенных случаях) «встроенные» методы ( т.е. копировать код из вызываемого метода в вызывающий метод), чтобы уменьшить накладные расходы на вызов метода.
Я предполагаю, что ответ будет «snort ... конечно, нет», но есть ли вероятность, что компилятор может встроить метод с использованием Span в метод asyn c? Если так, то, как я понимаю, это приведет к проблемам .... (включая "локальные методы")