FileStream.EndRead(IAsyncResult) Metod

Definition

Väntar på att den väntande asynkrona läsåtgärden ska slutföras. (Överväg att använda ReadAsync(Byte[], Int32, Int32, CancellationToken) i stället.)

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

Parametrar

asyncResult
IAsyncResult

Referensen till den väntande asynkrona begäran att vänta på.

Returer

Antalet byte som lästs från strömmen, mellan 0 och antalet byte som du begärde. Strömmar returnerar endast 0 i slutet av strömmen, annars bör de blockeras tills minst 1 byte är tillgängligt.

Undantag

asyncResult är null.

Det här IAsyncResult objektet skapades inte genom att anropa BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) den här klassen.

Strömmen stängs eller så har ett internt fel inträffat.

Exempel

Det här kodexemplet är en del av ett större exempel som tillhandahålls FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) för konstruktorn.

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

Kommentarer

I .NET Framework 4 och tidigare versioner måste du använda metoder som BeginRead och EndRead för att implementera asynkrona filåtgärder. Dessa metoder är fortfarande tillgängliga i .NET Framework 4.5 för att stödja äldre kod. De nya asynkrona metoderna, till exempel ReadAsync, WriteAsync, CopyToAsync och FlushAsync, hjälper dig att implementera asynkrona filåtgärder enklare.

EndRead måste anropas exakt för varje anrop till BeginRead. Om du inte avslutar en läsprocess innan du påbörjar en annan läsning kan det orsaka oönskade beteenden, till exempel dödläge.

Den här metoden åsidosätter EndRead.

EndRead kan anropas på var IAsyncResult från BeginRead. Samtal EndRead visar hur många byte som lästes från strömmen. EndRead blockeras tills I/O-åtgärden har slutförts.

Gäller för

Se även