0

我有一个谷歌表并下载它:

 Task<byte[]> _res = Http.GetByteArrayAsync(_webPath);

然后我制作一个流:

Stream _stream = new MemoryStream(_res.Result);

并使用此流。我想解析表。在控制台 .net 核心应用程序中,此方法效果很好,但是当我在 blazor 应用程序中使用它时,它不起作用。

Task<byte[]> _res = Http.GetByteArrayAsync(_webPath);
Console.WriteLine("3");
_stream = new MemoryStream(_res.Result);
Console.WriteLine("4");

结果

我也不例外。

4

1 回答 1

1

问题是_res.Result阻塞线程直到任务完成,这会导致死锁,因为 blazor 只有一个线程。

https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1.result?view=netframework-4.7.2

访问属性的 get 访问器会阻塞调用线程,直到异步操作完成;相当于调用Wait方法。

您需要等待任务,await _res以便线程不会阻塞并且可以完成任务。

于 2018-08-10T10:53:45.027 回答