【发布时间】:2018-12-02 01:46:55
【问题描述】:
我正在尝试使用接受Memory<T> 的StreamReader.ReadAsync(Memory, CancellationToken) overload。
以下是示例代码:(.NET Core 2.1)
static async Task Main(string[] args)
{
string code = "Hello, World";
var memoryStream = Encoding.UTF8.GetBytes(code.ToCharArray(), 0, code.Length);
using (var stream = new MemoryStream(memoryStream))
using (var reader = new StreamReader(stream))
{
// var text = await reader.ReadLineAsync();
// Console.WriteLine(text); -> Outputs: Hello, World
Memory<char> memory = new Memory<char>();
await reader.ReadAsync(memory);
Console.WriteLine("Memory<char> length:" + memory.Length);
}
}
代码尝试通过StreamReader 读取字符串内容并填充Memory<char>。但是,对于 Memory<char> 长度,代码一直输出 0。
使用此方法填充Memory<char> 的正确方法是什么?
我的.csproj文件内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<LangVersion>7.2</LangVersion>
</PropertyGroup>
</Project>
【问题讨论】:
-
你是在写还是从内存中读取 await reader.ReadAsync(memory);?
-
尝试从流中读取到内存。
-
作为测试,删除
async的所有内容,没有它你的代码可以工作吗? -
@CodingYoshi 不,它仍然不起作用。