MemoryStreamでのデータのダウンロード

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

結果

私は例外ではありません。

受け入れられた回答

問題は、 _res.Resultがタスクが完了するまでスレッドをブロックすることで、 _res.Resultはスレッドが1つしかないためデッドロックになります。

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

プロパティのgetアクセサにアクセスすると、非同期操作が完了するまで呼び出しスレッドがブロックされます。これはWaitメソッドの呼び出しと同じです。

スレッドがブロックではなく、タスクを完了できるように、 await _resを待ってタスクをawait _res必要があります。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ