Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Inizia un'operazione di lettura asincrona. Si consiglia di usare ReadAsync(Byte[], Int32, Int32).
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
Parametri
- buffer
- Byte[]
Buffer in cui leggere i dati.
- offset
- Int32
Offset dei byte nel buffer
da cui iniziare la scrittura dei dati letti dal flusso.
- count
- Int32
Numero massimo di byte da leggere.
- callback
- AsyncCallback
Callback asincrono facoltativo, da chiamare quando la lettura è completa.
- state
- Object
Oggetto fornito dall'utente che distingue questa specifica richiesta di lettura asincrona da altre richieste.
Restituisce
Oggetto IAsyncResult che rappresenta la lettura asincrona, che può essere ancora in sospeso.
Eccezioni
È stato eseguito un tentativo di lettura asincrona oltre la fine del flusso o si è verificato un errore del disco.
Uno o più argomenti non sono validi.
Sono stati chiamati dei metodi dopo la chiusura del flusso.
L'implementazione corrente di Stream
non supporta l'operazione di lettura.
Commenti
In .NET Framework 4 e versioni precedenti è necessario usare metodi quali BeginRead e EndRead per implementare operazioni di I/O asincrone. Questi metodi sono ancora disponibili in .NET Framework 4.5 per supportare il codice legacy; Tuttavia, i nuovi metodi asincroni, ad esempio ReadAsync, CopyToAsyncWriteAsync, e FlushAsync, consentono di implementare più facilmente operazioni di I/O asincrone.
L'implementazione predefinita di BeginRead
in un flusso chiama il Read metodo in modo sincrono, il che significa che Read
potrebbe bloccarsi in alcuni flussi. Tuttavia, istanze di classi come FileStream
e NetworkStream
supportano completamente le operazioni asincrone se le istanze sono state aperte in modo asincrono. Pertanto, le chiamate a BeginRead
non verranno bloccate su tali flussi. È possibile eseguire l'override BeginRead
(usando delegati asincroni, ad esempio) per fornire un comportamento asincrono.
Passare il IAsyncResult
valore restituito al EndRead metodo del flusso per determinare il numero di byte letti e per rilasciare le risorse del sistema operativo usate per la lettura. EndRead deve essere chiamato una volta per ogni chiamata a BeginRead. A tale scopo, è possibile usare lo stesso codice che ha chiamato BeginRead
o in un callback passato a BeginRead
.
La posizione corrente nel flusso viene aggiornata quando viene eseguita la lettura o la scrittura asincrona, non al termine dell'operazione di I/O.
Più richieste asincrone simultanee rendono incerto l'ordine di completamento della richiesta.
Utilizzare la CanRead proprietà per determinare se l'istanza corrente supporta la lettura.
Se un flusso viene chiuso o si passa un argomento non valido, le eccezioni vengono generate immediatamente da BeginRead
. Gli errori che si verificano durante una richiesta di lettura asincrona, ad esempio un errore del disco durante la richiesta di I/O, si verificano nel thread del pool di thread e generano eccezioni quando si chiama EndRead
.