asynchron in eine Datei schreiben

9

Gibt es eine Möglichkeit, eine asynchrone Funktion zu schreiben, die wiederholt Daten in eine Datei schreibt.

Ich erhalte den folgenden Fehler, wenn ich asynchrone Funktion schreibe

Der Prozess kann nicht auf die Datei 'c: \ Temp \ Data.txt' zugreifen, da sie von einem anderen Prozess verwendet wird

%Vor%     
CPK_2011 02.08.2012, 09:39
quelle

4 Antworten

13

Nun, ich hatte das gleiche Problem. Und habe es jetzt gelöst. Es ist eine Art späte Suggestion, kann aber für andere hilfreich sein.

Fügen Sie die folgenden using-Anweisungen in die folgenden Konsolenbeispiele ein.

%Vor%

In den folgenden Beispielen wird die FileStream-Klasse verwendet, die über eine Option verfügt, die dazu führt, dass asynchrones E / A auf Betriebssystemebene auftritt. In vielen Fällen verhindert dies die Blockierung eines ThreadPool-Threads. Um diese Option zu aktivieren, müssen Sie das Argument useAsync = true oder options = FileOptions.Asynchron im Konstruktoraufruf angeben.

StreamReader und StreamWriter haben diese Option nicht, wenn Sie sie direkt öffnen, indem Sie einen Dateipfad angeben. StreamReader / Writer haben diese Option, wenn Sie ihnen einen Stream bereitstellen, der von der FileStream-Klasse geöffnet wurde. Beachten Sie, dass Asynchronität einen Reaktionszeitvorteil in UI-Apps bietet, selbst wenn ein Threadpool-Thread blockiert ist, da der UI-Thread während des Wartens nicht blockiert wird.

Text schreiben

Im folgenden Beispiel wird Text in eine Datei geschrieben. Bei jeder Warteanweisung wird die Methode sofort beendet. Wenn die Datei-E / A abgeschlossen ist, wird die Methode an der Anweisung fortgesetzt, die der Warteanweisung folgt. Beachten Sie, dass der Modifizierer async in der Definition von Methoden enthalten ist, die die Anweisung wait verwenden.

%Vor%

Text lesen

Das folgende Beispiel liest Text aus einer Datei. Der Text wird gepuffert und in diesem Fall in einen StringBuilder eingefügt. Anders als im vorherigen Beispiel ergibt die Auswertung der Wartezeit einen Wert. Die ReadAsync-Methode gibt eine Aufgabe zurück, sodass die Bewertung der Wartezeit einen Int32-Wert (numRead) ergibt, der nach Abschluss der Operation zurückgegeben wird.

%Vor%

Sie können eine Originalquelle von Verwenden von Async für den Dateizugriff

Ich hoffe, das hilft ...

    
curiousBoy 24.03.2014, 18:36
quelle
5

Das asynchrone Schreiben in die Datei löst dieses Problem nicht. Sie müssen warten, bis die Datei verfügbar ist.

    
Erno de Weerd 02.08.2012 09:41
quelle
3

Beispiel für eine Hilfsmethode zum asynchronen Schreiben in eine Datei.

%Vor%     
SteveD 22.05.2017 16:11
quelle
0

Letztendlich kommt es darauf an, warum Sie es versuchen.

Wenn Sie nicht zu viele Daten in die Datei schreiben, können Sie sie ständig öffnen und schließen.

Wenn Sie wissen, wann die Datei geöffnet werden soll und wann sie geschlossen werden soll, können Sie sie öffnen, wenn sie benötigt wird, und sie dann zum Schreiben geöffnet lassen, bis Sie wissen, dass sie nicht mehr benötigt wird.

    
Pharap 02.08.2012 09:51
quelle

Tags und Links