在MemoryStream中下載數據

blazor

我有一個谷歌表並下載它:

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

結果

我也不例外。

一般承認的答案

問題是_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任務,以便線程不阻塞並完成任務。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因