FileStream.EndRead(IAsyncResult) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.