Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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
.