FileStream.EndRead(IAsyncResult) Méthode

Définition

Attend la fin de l’opération de lecture asynchrone en attente. (Envisagez d’utiliser ReadAsync(Byte[], Int32, Int32, CancellationToken) à la place.)

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ètres

asyncResult
IAsyncResult

Référence à la requête asynchrone en attente à attendre.

Retours

Nombre d’octets lus à partir du flux, compris entre 0 et le nombre d’octets que vous avez demandés. Les flux retournent uniquement 0 à la fin du flux, sinon, ils doivent bloquer jusqu’à ce qu’au moins 1 octet soit disponible.

Exceptions

asyncResult a la valeur null.

Cet IAsyncResult objet n’a pas été créé en appelant BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) cette classe.

EndRead(IAsyncResult) est appelé plusieurs fois.

Le flux est fermé ou une erreur interne s’est produite.

Exemples

Cet exemple de code fait partie d’un exemple plus large fourni pour le FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) constructeur.

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

Remarques

Dans .NET Framework 4 et versions antérieures, vous devez utiliser des méthodes telles que BeginRead et EndRead implémenter des opérations de fichier asynchrones. Ces méthodes sont toujours disponibles dans .NET Framework 4.5 pour prendre en charge le code hérité. Toutefois, les nouvelles méthodes asynchrones, telles que ReadAsync, WriteAsync, CopyToAsync et FlushAsync, vous aident à implémenter plus facilement les opérations de fichiers asynchrones.

EndRead doit être appelé exactement pour chaque appel à BeginRead. L’échec de la fin d’un processus de lecture avant de commencer une autre lecture peut entraîner un comportement indésirable tel que l’interblocage.

Cette méthode se substitue à EndRead.

EndRead peut être appelé sur toutes les IAsyncResult données de BeginRead. L’appel EndRead vous indique le nombre d’octets lus à partir du flux. EndRead bloque jusqu’à ce que l’opération d’E/S soit terminée.

S’applique à

Voir aussi