ReadAsync(byte[], int, int, CancellationToken)
このメソッドは、指定された数のバイトをOracleBFileインスタンスから読み取ってbufferに移入する、タスクベースの非同期バージョンのOracleBFile.Read()を返します。
宣言
// C# public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
パラメータ
-
buffer- 移入先となるバイト配列buffer。 -
offset- bufferへの移入を開始する位置となるオフセット(バイト数)。 -
count- 読み取るバイトの数。 -
cancellationToken- タスクを取り消すためにアプリケーションによって使用可能な入力取消しトークン。
戻り値
問合せ実行の期間全体にわたりコール元のスレッドをブロックすることがない、即座に非同期処理を表すTask<Int>オブジェクト。
実装
Stream
例外
-
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 bfile_column from tab1";
OracleDataReader reader = await cmd.ExecuteReaderAsync();
await reader.ReadAsync(CancellationToken.None);
using (var bfile = reader.GetOracleBFile(0))
{
bfile.OpenFile();
byte[] buffer = new byte[100];
//asynchronously read bfile data
Task<int> task = bfile.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);
}
}
}
}