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未満の場合。

    • offsetbuffer.Length以上の場合。

    • offsetcountの合計が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);
      }
    }
  }
}