Hat die FRAMEWORK einen async integrierte Bibliothek/Baugruppe, die mit dem Dateisystem zu arbeiten, ermöglicht hat (zB File.ReadAllBytes, File.WriteAllBytes)?
Leider sind die Desktop-APIs bei asynchronen Dateioperationen ein wenig fleckig. Wie Sie festgestellt haben, gibt es bei einigen netten Convenience-Methoden keine asynchronen Entsprechungen. Außerdem fehlen asynchrone Öffnen von von Dateien (was besonders nützlich beim Öffnen von Dateien über eine Netzwerkfreigabe ist).
Ich hoffe, dass diese APIs hinzugefügt werden, wie die Welt zu .NET Core bewegt.
Oder muss ich meine eigene Bibliothek mit den asynchronen Methoden von StreamReader und StreamWriter schreiben?
Das ist der beste Ansatz jetzt.
Beachten Sie, dass, wenn ReadAsync
/WriteAsync
und Freunde verwenden, müssen Sie die Datei explizit für asynchronen Zugriff öffnen. Die einzige Möglichkeit, dies (derzeit) zu tun, besteht darin, eine Konstruktorüberladung zu verwenden, die einen bool isAsync
Parameter (übergibt true
) oder einen FileOptions
Parameter (übergibt FileOptions.Asynchronous
). Sie können also keine offenen Methoden wie File.Open
verwenden.
Wenn die Datei, die Sie in einen Bytestream serialisiert haben, groß war (3gb +), besteht die Möglichkeit, dass die Streamlänge größer ist als ein Int-Typ, der sie speichern und überlaufen lässt? – Dave
@Dave wahrscheinlich. In solchen Fällen müssen Sie wahrscheinlich Chunks einlesen. – i3arnon
Sie sollten Logik haben, in Blöcke unabhängig zu lesen. Laut [Microsoft-Dokumentation] (https://docs.microsoft.com/en-us/dotnet/api/system.io.filestream.readasync?view=netframework-4.7.1#System_IO_FileStream_ReadAsync_System_Byte___System_Int32_System_Int32_System_Threading_CancellationToken_) kann ReadAsync nicht garantiert gefüllt werden das ganze Array. Sie müssen den Rückgabewert überprüfen, um zu sehen, wie viel _ _actually_ gelesen wird. – Phil