我正在从 WebAPI 下载流,并尝试在读取流时运行代码。
下面的代码在 Blazor 服务器端或控制台应用程序上运行良好。但是在 blazor 客户端,流将首先完全下载,然后再执行任何代码......即使只是一个 Console.WriteLine() 也会在流完成后开始写入控制台。我正在使用最新的 .Net Core 3.0 Preview 8 ...
public async IAsyncEnumerable<SomeClass> GetDataAsync()
{
var serializer = new JsonSerializer();
using (var stream = await Http.GetStreamAsync("https://localhost:44334/api/values/i"))
{
using (var sr = new StreamReader(stream))
using (var jr = new JsonTextReader(sr))
{
while (await jr.ReadAsync()) //<-- Stream is fully download to browser before taking any actions.
{
if (jr.TokenType != JsonToken.StartArray && jr.TokenType != JsonToken.EndArray)
{
Console.WriteLine(jsonReader.LinePosition);
yield return serializer.Deserialize<SomeClass>(jr);
}
};
}
}
}
我用 WireShark 对此进行了测试,以确认这种情况正在发生。
这是设计使然吗?