Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Metoda

Definicja

Rozpoczyna asynchroniczną operację odczytu. (Rozważ użycie ReadAsync(Byte[], Int32, Int32) zamiast tego).

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

Parametry

buffer
Byte[]

Bufor do odczytu danych.

offset
Int32

Przesunięcie bajtów, w buffer którym rozpoczyna się zapisywanie danych odczytanych ze strumienia.

count
Int32

Maksymalna liczba bajtów do odczytania.

callback
AsyncCallback

Opcjonalne wywołanie asynchroniczne, które ma być wywoływane po zakończeniu odczytu.

state
Object

Obiekt dostarczony przez użytkownika, który rozróżnia to konkretne asynchroniczne żądanie odczytu z innych żądań.

Zwraca

IAsyncResult

Element IAsyncResult reprezentujący odczyt asynchroniczny, który nadal może być oczekujący.

Wyjątki

Podjęto próbę asynchronicznego odczytu poza końcem strumienia lub wystąpił błąd dysku.

Co najmniej jeden argument jest nieprawidłowy.

Metody zostały wywołane po zamknięciu strumienia.

Bieżąca Stream implementacja nie obsługuje operacji odczytu.

Uwagi

W programie .NET Framework w wersji 4 i starszych do implementowania asynchronicznych operacji We/Wy należy używać metod takich jak BeginRead i EndRead. Te metody są nadal dostępne w .NET Framework 4.5 do obsługi starszego kodu. Jednak nowe metody asynchroniczne, takie jak ReadAsync, WriteAsync, CopyToAsynci FlushAsync, ułatwiają implementowanie asynchronicznych operacji we/wy.

Domyślna implementacja elementu w strumieniu BeginRead wywołuje Read metodę synchronicznie, co oznacza, że może to Read blokować niektóre strumienie. Jednak wystąpienia klas, takich jak FileStream i NetworkStream w pełni obsługują operacje asynchroniczne, jeśli wystąpienia zostały otwarte asynchronicznie. W związku z tym wywołania metody do BeginRead metody nie będą blokować tych strumieni. Możesz przesłonić BeginRead (na przykład za pomocą delegatów asynchronicznych), aby zapewnić zachowanie asynchroniczne.

Przekaż wartość zwracaną IAsyncResult EndRead do metody strumienia, aby określić liczbę odczytanych bajtów i zwolnić zasoby systemu operacyjnego używane do odczytu. EndRead musi być wywoływany raz dla każdego wywołania metody BeginRead. Można to zrobić przy użyciu tego samego kodu, który wywołuje BeginRead metodę lub w wywołaniu zwrotnym przekazanym do metody BeginRead.

Bieżące położenie w strumieniu jest aktualizowane po wydaniu asynchronicznego odczytu lub zapisu, a nie po zakończeniu operacji we/wy.

Wiele równoczesnych żądań asynchronicznych sprawia, że kolejność ukończenia żądania jest niepewna.

Użyj właściwości , CanRead aby określić, czy bieżące wystąpienie obsługuje odczyt.

Jeśli strumień jest zamknięty lub przekazujesz nieprawidłowy argument, wyjątki są zgłaszane natychmiast z elementu BeginRead. Błędy występujące podczas asynchronicznego żądania odczytu, takie jak awaria dysku podczas żądania we/wy, występują w wątku puli wątków i zgłaszają wyjątki podczas wywoływania metody EndRead.

Dotyczy

Zobacz też