ReadAsync(byte[], int, int, CancellationToken)
This method returns a Task-based asynchronous version of OracleBFile.Read(), which reads a specified number of bytes from the OracleBFile instance and populates the buffer.
Declaration
// C# public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
Parameters
-
buffer- The byte array buffer to be populated. -
offset- The starting offset (in bytes) at which the buffer is populated. -
count- The number of bytes to read. -
cancellationToken- The input cancellation token which can be used by the application to cancel the task.
Return Value
Task<Int> object representing the asynchronous operation immediately without blocking the calling thread for the whole duration of the query execution.
Implements
Stream
Exceptions
-
ObjectDisposedException- The object is already disposed. -
InvalidOperationException- TheOracleConnectionis not open or has been closed during the lifetime of the object. -
ArgumentOutOfRangeException- This exception is thrown if any of the following conditions exist:-
The
offsetor thecountparameter is less than0. -
The
offsetis greater than or equal to thebuffer.Length. -
The
offsetand thecounttogether are greater than thebuffer.Length.
-
Example
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);
}
}
}
}