Partager via


Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Méthode

Définition

Commence une opération de lecture asynchrone. (Envisagez d’utiliser ReadAsync(Byte[], Int32, Int32) à la place.)

public:
 virtual IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public virtual IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public virtual IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state);
public virtual IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object? state);
abstract member BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overridable Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

Paramètres

buffer
Byte[]

Mémoire tampon dans laquelle lire les données.

offset
Int32

Décalage d’octet dans buffer lequel commencer l’écriture de données lues à partir du flux.

count
Int32

Nombre maximal d’octets à lire.

callback
AsyncCallback

Rappel asynchrone facultatif à appeler une fois la lecture terminée.

state
Object

Objet fourni par l’utilisateur qui distingue cette demande de lecture asynchrone particulière d’autres requêtes.

Retours

Qui IAsyncResult représente la lecture asynchrone, qui peut toujours être en attente.

Exceptions

Une tentative de lecture asynchrone au-delà de la fin du flux ou d’une erreur de disque se produit.

Un ou plusieurs arguments ne sont pas valides.

Les méthodes ont été appelées après la fermeture du flux.

L’implémentation actuelle Stream ne prend pas en charge l’opération de lecture.

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 d’E/S 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, CopyToAsyncet FlushAsync, vous aident à implémenter plus facilement les opérations d’E/S asynchrones.

L’implémentation par défaut d’un BeginRead flux appelle la Read méthode de manière synchrone, ce qui signifie que cela Read peut bloquer sur certains flux. Toutefois, les instances de classes telles que FileStream et NetworkStream prennent entièrement en charge les opérations asynchrones si les instances ont été ouvertes de façon asynchrone. Par conséquent, les appels à ne BeginRead pas bloquer sur ces flux. Vous pouvez remplacer BeginRead (à l’aide de délégués asynchrones, par exemple) pour fournir un comportement asynchrone.

Transmettez la IAsyncResult valeur de retour à la EndRead méthode du flux pour déterminer le nombre d’octets lus et libérer les ressources du système d’exploitation utilisées pour la lecture. EndRead doit être appelé une fois pour chaque appel à BeginRead. Pour ce faire, vous pouvez utiliser le même code que celui qui a appelé BeginRead ou dans un rappel passé à BeginRead.

La position actuelle dans le flux est mise à jour lorsque la lecture ou l’écriture asynchrone est émise, et non lorsque l’opération d’E/S se termine.

Plusieurs requêtes asynchrones simultanées rendent l’ordre de saisie semi-automatique de la demande incertain.

Utilisez la CanRead propriété pour déterminer si l’instance actuelle prend en charge la lecture.

Si un flux est fermé ou si vous passez un argument non valide, les exceptions sont levées immédiatement à partir de BeginRead. Les erreurs qui se produisent pendant une demande de lecture asynchrone, comme une défaillance de disque pendant la requête d’E/S, se produisent sur le thread du pool de threads et lèvent des exceptions lors de l’appel EndRead.

S’applique à

Voir aussi