FileStream.EndRead(IAsyncResult) Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Megvárja, amíg a függőben lévő aszinkron olvasási művelet befejeződik. (Fontolja meg a használatot 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
Paraméterek
- asyncResult
- IAsyncResult
A várakozó aszinkron kérésre való hivatkozás.
Válaszok
A streamből beolvasott bájtok száma 0 és a kért bájtok száma között. A streamek csak a stream végén 0 értéket adnak vissza, ellenkező esetben legalább 1 bájtig blokkolniuk kell őket.
Kivételek
asyncResult az null.
Ez az IAsyncResult objektum nem az osztály meghívásával BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) jött létre.
EndRead(IAsyncResult) többször is meghívjuk.
A stream bezárult, vagy belső hiba történt.
Példák
Ez a példakód egy nagyobb, a FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) konstruktor számára biztosított példa része.
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
Megjegyzések
A .NET Framework 4- és korábbi verzióiban olyan módszereket kell használnia, mint a BeginRead és a EndRead az aszinkron fájlműveletek implementálásához. Ezek a metódusok továbbra is elérhetők a .NET Framework 4.5-ben az örökölt kód támogatásához, azonban az új aszinkron metódusok, például a ReadAsync, WriteAsync, CopyToAsync és FlushAsync egyszerűbben implementálják az aszinkron fájlműveleteket.
EndReadminden híváshoz pontosan meg kell hívni.BeginRead Ha egy olvasási folyamatot egy másik olvasás megkezdése előtt nem sikerül befejezni, az nemkívánatos viselkedést, például holtpontot okozhat.
Ez a metódus felülbírálja a parancsot EndRead.
EndRead minden helyről IAsyncResultBeginReadmeghívható. A hívás EndRead azt jelzi, hogy hány bájt olvasott a streamből. EndRead le lesz tiltva, amíg az I/O-művelet be nem fejeződik.