Herunterladen von Daten in MemoryStream

blazor

Frage

Ich habe eine Google-Tabelle und lade sie herunter:

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

Dann mache ich einen Stream:

Stream _stream = new MemoryStream(_res.Result);

Und arbeite mit diesem Stream. Ich möchte den Tisch analysieren. In der Konsole .net-Kern-Anwendung funktioniert diese Methode gut, aber wenn ich es in blazor App verwende, funktioniert es nicht.

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

Ergebnis

Ich habe keine Ausnahme.

Akzeptierte Antwort

Das Problem ist, dass _res.Result den Thread blockiert, bis die Aufgabe abgeschlossen ist, was zu einem Deadlock führt, da Blazor nur einen Thread hat.

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

Der Zugriff auf den get-Accessor der Eigenschaft blockiert den aufrufenden Thread, bis der asynchrone Vorgang abgeschlossen ist. Dies entspricht dem Aufruf der Wait-Methode.

Sie müssen die Aufgabe mit await _res damit der Thread nicht blockiert wird und die Aufgabe abschließen kann.




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum