NextResultAsync(CancellationToken)

このメソッドは、タスクベースの非同期バージョンのOracleDataReader.NextResult()を返します。

宣言

// C#
public Task<bool> NextResultAsync(CancellationToken cancellationToken);

パラメータ

cancellationToken - コマンドのタイムアウトが発生する前にタスクを取り消すためにアプリケーションによって使用可能な入力取消しトークン。

戻り値

問合せ実行の期間全体にわたりコール元のスレッドをブロックすることがない、即座に非同期処理を表すTask<bool>オブジェクト

実装

DbDataReader

例外

InvalidOperationException - 接続がクローズされているか、リーダーがクローズされています。

using Oracle.ManagedDataAccess.Client;
using System;
using System.Data;
using System.Threading;
using System.Threading.Tasks;

namespace AsyncApp
{
  class AsyncDemo
  {
    static async Task Main()
    {
      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 = "BEGIN OPEN :1 FOR SELECT * FROM EMPLOYEES; OPEN :2 FOR SELECT * FROM DEPARTMENTS; END; ";

      OracleParameter p1 = cmd.Parameters.Add("1", OracleDbType.RefCursor);
      p1.Direction = ParameterDirection.Output;

      OracleParameter p2 = cmd.Parameters.Add("2", OracleDbType.RefCursor);
      p2.Direction = ParameterDirection.Output;

      OracleDataReader reader = await cmd.ExecuteReaderAsync();

      await reader.ReadAsync(CancellationToken.None);
      Console.WriteLine(reader.GetValue(0));

      Task task = reader.NextResultAsync(CancellationToken.None);
      Console.WriteLine("Hello World");
      await task;

      await reader.ReadAsync(CancellationToken.None);
      Console.WriteLine(reader.GetValue(0));
      oc.Close();
    }
  }
}