ReadAsync(byte[], int, int, CancellationToken)
ReadAsync
メソッドは、指定された数のバイトをODP.NET LOBインスタンスから読み取ってbufferに移入する、タスクベースの非同期バージョンのOracleBlob.Read()
を返します。
宣言
// C# public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken);
パラメータ
-
buffer
移入されるバイト配列バッファ
-
offset
バッファに移入される開始オフセット(バイト)
-
count
読み取るバイトの数。
-
cancellationToken
タスクを取り消すためにアプリケーションによって使用可能な入力取消しトークン。
戻り値
問合せ実行の期間全体にわたりコール元のスレッドをブロックすることがない、即座に非同期処理を表すTask<Int>
オブジェクト。
例外
-
ObjectDisposedException
- オブジェクトはすでに処理されています。 InvalidOperationException
-OracleConnection
がオープンされていないか、またはオブジェクトの存続中にクローズされています。-
ArgumentOutOfRangeException
- この例外は次のいずれかの条件が存在する場合に表示されます。-
offsetまたはcountパラメータが0未満の場合。
-
offsetが
buffer.Length
以上の場合。 -
offsetとcountの合計が
buffer.Length
より大きい場合。
-
例
using Oracle.ManagedDataAccess.Client; using Oracle.ManagedDataAccess.Types; using System; using System.Threading; using System.Threading.Tasks; namespace AsyncApp { class AsyncDemo { static async Task Main(string[] args) { string connectionString = "User Id=HR; Password=<PASSWORD>; Data Source=oracle;"; OracleConnection oc = new OracleConnection(connectionString); await oc.OpenAsync(CancellationToken.None); OracleCommand cmd = oc.CreateCommand(); cmd.CommandText = " select blob_column from tab1"; OracleDataReader reader = await cmd.ExecuteReaderAsync(); while (await reader.ReadAsync(CancellationToken.None)) { using (OracleBlob blob = reader.GetOracleBlob(0)) { byte[] buffer = new byte[100]; //asynchronously read blob data Task<int> task = blob.ReadAsync(buffer, 0, 64, CancellationToken.None); //other operations Console.WriteLine("Hello World"); //await for asynchronous ReadAsync int bytesRead = await task; Console.WriteLine("Bytes Read: " + bytesRead); } } } } }