次の方法で共有


Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) メソッド

定義

非同期読み取り操作を開始します。 (代わりに 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

パラメーター

buffer
Byte[]

データを読み取るバッファー。

offset
Int32

ストリームから読み取られたデータの書き込みを開始する buffer のバイト オフセット。

count
Int32

読み取る最大バイト数。

callback
AsyncCallback

読み取りが完了したときに呼び出される、省略可能な非同期コールバック。

state
Object

この特定の非同期読み取り要求を他の要求と区別するユーザー指定のオブジェクト。

戻り値

非同期読み取りを表す IAsyncResult 。まだ保留中である可能性があります。

例外

ストリームの末尾を超えて非同期読み取りを試行したか、ディスク エラーが発生しました。

1 つ以上の引数が無効です。

ストリームが閉じられた後、メソッドが呼び出されました。

現在の Stream 実装では、読み取り操作はサポートされていません。

注釈

.NET Framework 4 以前のバージョンでは、 BeginReadEndRead などのメソッドを使用して非同期 I/O 操作を実装する必要があります。 これらのメソッドは、レガシ コードをサポートするために .NET Framework 4.5 で引き続き使用できます。ただし、 ReadAsyncWriteAsyncCopyToAsyncFlushAsyncなどの新しい非同期メソッドは、非同期 I/O 操作をより簡単に実装するのに役立ちます。

ストリームに対する BeginRead の既定の実装では、 Read メソッドが同期的に呼び出されます。つまり、一部のストリームで Read がブロックされる可能性があります。 ただし、 FileStreamNetworkStream などのクラスのインスタンスは、インスタンスが非同期に開かれている場合、非同期操作を完全にサポートします。 したがって、 BeginRead の呼び出しはこれらのストリームでブロックされません。 BeginReadをオーバーライドして (非同期デリゲートなどを使用して)、非同期動作を提供できます。

IAsyncResult戻り値をストリームのEndReadメソッドに渡して、読み取られたバイト数を確認し、読み取りに使用されるオペレーティング システム リソースを解放します。 EndRead は、 BeginReadの呼び出しごとに 1 回呼び出す必要があります。 これを行うには、 BeginRead を呼び出したのと同じコードを使用するか、 BeginReadに渡されたコールバックで実行します。

ストリーム内の現在の位置は、I/O 操作が完了したときではなく、非同期の読み取りまたは書き込みが発行されたときに更新されます。

複数の同時非同期要求では、要求の完了順序が不明になります。

現在のインスタンスが読み取りをサポートしているかどうかを判断するには、 CanRead プロパティを使用します。

ストリームが閉じているか、無効な引数を渡すと、 BeginReadからすぐに例外がスローされます。 I/O 要求中のディスク障害など、非同期読み取り要求中に発生するエラーは、スレッド プール スレッドで発生し、 EndReadを呼び出すときに例外をスローします。

適用対象

こちらもご覧ください