我正在更新一些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:
// ...
}
Peek
方法首先将流读取到其缓冲区中,然后从中提供值(请看dotnet runtime repo)。因此它将移动流的位置。但是,如果不阅读并寻求流,便无法实现窥视功能。