是否存在StreamReader的Peek方法的异步等效项?

问题描述 投票:4回答:1

我正在更新一些netstandard2.0代码以使其不同步地从HttpRequest.Body(a Stream)中读取(除非您设置netcoreapp3.0选项,否则这在AllowSynchronousIO中引发异常,这显然不是一个好主意) 。

我已经转换了JSON反序列化部分(以使用System.Text.Json),但是在此之前,它使用.Peek()进行了偷偷摸摸的StreamReader(以查看主体是对象还是数组),我'不确定要在哪里寻找异步且不会消耗Stream的现代替代品。

using var reader = new StreamReader(stream);
switch (reader.Peek()) // TODO: Find an async equivalent!
{
    case '{':
        return await JsonSerializer.DeserializeAsync<GraphQLRequest>(stream);
    case '[':
        return await JsonSerializer.DeserializeAsync<GraphQLRequest[]>(stream);
    default:
        // ...
}
c# asynchronous .net-core stream streamreader
1个回答
1
投票
实际上,Peek方法首先将流读取到其缓冲区中,然后从中提供值(请看dotnet runtime repo)。因此它将移动流的位置。但是,如果不阅读并寻求流,便无法实现窥视功能。
© www.soinside.com 2019 - 2024. All rights reserved.