FileStream.EndRead(IAsyncResult) Metoda

Definice

Čeká na dokončení čekající asynchronní operace čtení. (Místo toho zvažte použití 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

Parametry

asyncResult
IAsyncResult

Odkaz na čekající asynchronní požadavek na čekání.

Návraty

Počet bajtů přečtených z datového proudu v rozmezí od 0 do počtu bajtů, které jste požadovali. Streamy vrátí pouze 0 na konci datového proudu, jinak by měly blokovat, dokud nebude k dispozici alespoň 1 bajt.

Výjimky

asyncResult je null.

Tento IAsyncResult objekt nebyl vytvořen voláním BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) této třídy.

Datový proud je zavřený nebo došlo k vnitřní chybě.

Příklady

Tento příklad kódu je součástí většího příkladu zadaného FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) pro konstruktor.

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

Poznámky

V rozhraní .NET Framework 4 a starších verzích musíte použít metody, jako BeginRead je a EndRead implementovat asynchronní operace se soubory. Tyto metody jsou stále k dispozici v rozhraní .NET Framework 4.5 pro podporu starší verze kódu. Nové asynchronní metody, například ReadAsync, WriteAsync, CopyToAsync a FlushAsync, vám usnadní implementaci asynchronních operací se soubory.

EndRead musí být volána přesně pro každé volání BeginRead. Selhání ukončení procesu čtení před zahájením jiného čtení může způsobit nežádoucí chování, jako je zablokování.

Tato metoda přepíše EndRead.

EndRead lze volat na každý IAsyncResult z BeginRead. Volání EndRead vám řekne, kolik bajtů se z datového proudu načetlo. EndRead bude blokovat, dokud se nedokončí vstupně-výstupní operace.

Platí pro

Viz také