FileStream.EndRead(IAsyncResult) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Wacht totdat de asynchrone leesbewerking is voltooid. (Overweeg in plaats daarvan om te gebruiken 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
Parameters
- asyncResult
- IAsyncResult
De verwijzing naar de asynchrone aanvraag in behandeling om te wachten.
Retouren
Het aantal bytes dat uit de stream is gelezen, tussen 0 en het aantal bytes dat u hebt aangevraagd. Streams retourneren alleen 0 aan het einde van de stream, anders moeten ze worden geblokkeerd tot ten minste 1 byte beschikbaar is.
Uitzonderingen
asyncResult is null.
Dit IAsyncResult object is niet gemaakt door deze klasse aan te roepen BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) .
EndRead(IAsyncResult) wordt meerdere keren aangeroepen.
De stream is gesloten of er is een interne fout opgetreden.
Voorbeelden
Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) constructor.
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
Opmerkingen
In de .NET Framework 4- en eerdere versies moet u methoden zoals BeginRead en EndRead gebruiken om asynchrone bestandsbewerkingen te implementeren. Deze methoden zijn nog steeds beschikbaar in het .NET Framework 4.5 ter ondersteuning van verouderde code. De nieuwe asynchrone methoden, zoals ReadAsync, WriteAsync, CopyToAsync en FlushAsync, helpen u bij het eenvoudiger implementeren van asynchrone bestandsbewerkingen.
EndRead moet precies worden aangeroepen voor elke oproep naar BeginRead. Als u een leesproces niet beëindigt voordat een andere leesbewerking wordt gestart, kan dit ongewenst gedrag veroorzaken, zoals een impasse.
Deze methode overschrijft EndRead.
EndRead kan worden aangeroepen op elke IAsyncResult van BeginRead. Bellen EndRead geeft aan hoeveel bytes er zijn gelezen uit de stream. EndRead wordt geblokkeerd totdat de I/O-bewerking is voltooid.