Udostępnij za pośrednictwem


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

Definicja

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

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

Parametry

buffer
Byte[]

Bufor do zapisywania danych z.

offset
Int32

Przesunięcie bajtu, buffer od którego rozpocznie się pisanie.

count
Int32

Maksymalna liczba bajtów do zapisu.

callback
AsyncCallback

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

state
Object

Obiekt dostarczony przez użytkownika, który odróżnia to konkretne asynchroniczne żądanie zapisu od innych żądań.

Zwraca

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

Wyjątki

Podjęto próbę asynchronicznego zapisu 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 zapisu.

Uwagi

W programie .NET Framework w wersji 4 i starszych do implementowania asynchronicznych operacji We/Wy należy używać metod takich jak BeginWrite i EndWrite. 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 BeginWrite wywołuje Write metodę synchronicznie, co oznacza, że może to Write 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 BeginWrite metody nie będą blokować tych strumieni. Możesz przesłonić BeginWrite (na przykład za pomocą delegatów asynchronicznych), aby zapewnić zachowanie asynchroniczne.

IAsyncResult Przekaż element zwrócony przez bieżącą metodę, aby EndWrite upewnić się, że zapis zostanie ukończony i zwolni zasoby odpowiednio. EndWrite musi być wywoływany raz dla każdego wywołania metody BeginWrite. Można to zrobić przy użyciu tego samego kodu, który wywołuje BeginWrite metodę lub w wywołaniu zwrotnym przekazanym do metody BeginWrite. Jeśli podczas zapisu asynchronicznego wystąpi błąd, wyjątek nie zostanie zgłoszony do momentu EndWrite wywołania metody zwracanej IAsyncResult przez tę metodę.

Jeśli strumień jest zapisywalny, zapis na końcu strumienia rozszerza strumień.

Bieżące położenie w strumieniu jest aktualizowane po wystąpieniu 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.

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

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

Dotyczy

Zobacz też