在MemoryStream中下载数据

时间:2018-08-10 09:35:35

标签: blazor

我有一个Google表格并下载:

 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");

Result

我也不例外。

1 个答案:

答案 0 :(得分: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等待任务,以便线程不会被阻塞并且可以完成任务。