FileStream.EndRead(IAsyncResult) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Wartet, bis der ausstehende asynchrone Lesevorgang abgeschlossen ist. (Erwägen Sie stattdessen die Verwendung ReadAsync(Byte[], Int32, Int32, CancellationToken) .)
public:
override int EndRead(IAsyncResult ^ asyncResult);
public override int EndRead(IAsyncResult asyncResult);
override this.EndRead : IAsyncResult -> int
Public Overrides Function EndRead (asyncResult As IAsyncResult) As Integer
Parameter
- asyncResult
- IAsyncResult
Der Verweis auf die ausstehende asynchrone Anforderung, auf die gewartet werden soll.
Gibt zurück
Die Anzahl der aus dem Datenstrom gelesenen Bytes zwischen 0 und der Anzahl der bytes, die Sie angefordert haben. Datenströme geben nur 0 am Ende des Datenstroms zurück, andernfalls sollten sie blockieren, bis mindestens 1 Byte verfügbar ist.
Ausnahmen
asyncResult ist null.
Dieses IAsyncResult Objekt wurde nicht durch Aufrufen BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) dieser Klasse erstellt.
EndRead(IAsyncResult) wird mehrmals aufgerufen.
Der Datenstrom ist geschlossen, oder es ist ein interner Fehler aufgetreten.
Beispiele
Dieses Codebeispiel ist Teil eines größeren Beispiels, das für den FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) Konstruktor bereitgestellt wird.
static void EndReadCallback(IAsyncResult asyncResult)
{
State tempState = (State)asyncResult.AsyncState;
int readCount = tempState.FStream.EndRead(asyncResult);
int i = 0;
while(i < readCount)
{
if(tempState.ReadArray[i] != tempState.WriteArray[i++])
{
Console.WriteLine("Error writing data.");
tempState.FStream.Close();
return;
}
}
Console.WriteLine("The data was written to {0} and verified.",
tempState.FStream.Name);
tempState.FStream.Close();
// Signal the main thread that the verification is finished.
tempState.ManualEvent.Set();
}
let endReadCallback (asyncResult: IAsyncResult) =
let tempState = asyncResult.AsyncState :?> State
let readCount = tempState.FStream.EndRead asyncResult
let mutable i = 0
let mutable errored = false
while i < readCount do
if tempState.ReadArray[i] <> tempState.WriteArray[i] then
printfn "Error writing data."
tempState.FStream.Close()
errored <- true
i <- readCount
i <- i + 1
printfn $"The data was written to {tempState.FStream.Name} and verified."
tempState.FStream.Close()
// Signal the main thread that the verification is finished.
tempState.ManualEvent.Set() |> ignore
Private Shared Sub EndReadCallback(asyncResult As IAsyncResult)
Dim tempState As State = _
DirectCast(asyncResult.AsyncState, State)
Dim readCount As Integer = _
tempState.FStream.EndRead(asyncResult)
Dim i As Integer = 0
While(i < readCount)
If(tempState.ReadArray(i) <> tempState.WriteArray(i))
Console.WriteLine("Error writing data.")
tempState.FStream.Close()
Return
End If
i += 1
End While
Console.WriteLine("The data was written to {0} and " & _
"verified.", tempState.FStream.Name)
tempState.FStream.Close()
' Signal the main thread that the verification is finished.
tempState.ManualEvent.Set()
End Sub
Hinweise
In .NET Framework 4 und früheren Versionen müssen Sie Methoden wie BeginRead und EndRead zum Implementieren asynchroner Dateivorgänge verwenden. Diese Methoden sind weiterhin im .NET Framework 4.5 verfügbar, um Legacycode zu unterstützen. Die neuen asynchronen Methoden wie ReadAsync, WriteAsync, CopyToAsync und FlushAsync helfen Ihnen, asynchrone Dateivorgänge einfacher zu implementieren.
EndReadmuss genau für jeden Anruf aufgerufen werden.BeginRead Wenn ein Lesevorgang nicht beendet wird, bevor ein anderer Lesevorgang beginnt, kann ein unerwünschtes Verhalten wie z. B. Deadlock auftreten.
Diese Methode überschreibt EndRead.
EndRead kann von jedem IAsyncResultBeginReadaufgerufen werden. Das Aufrufen EndRead teilt Ihnen mit, wie viele Bytes aus dem Datenstrom gelesen wurden. EndRead wird blockiert, bis der E/A-Vorgang abgeschlossen ist.