Nyelv

FileStream.EndRead(IAsyncResult) Metódus

Definíció

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.

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.

A következőre érvényes:

Lásd még