I don't know if OracleLob.BeginRead supports asynch operations, but the docn for
IAsyncResult.CompletedSynchronously says that it can return true "for an asynchronous
I/O operation if the I/O request was small." So unless you're actually reading data
for a relatively large bit of XML, I don't think you can tell whether you're getting
any advantage from being asynchronous.
At 04:54 AM 3/11/2004, Devrim Baris Acar wrote
>Hi,
>I have some code that reads some xml data from clob columns of an Oracle
>table synchronously.
>However in order to maximize CPU throughput(I guess it will), I changed the
>code to async. version.To my surprise it still works synchronously.
>I have crawled through documentation and read that BeginRead works async
>only if it is supported.
>
>Does OracleLob.BeginRead() support asyncronous operations?
>
>Thanks in advance.
>
>PS.Sorry for those who have read this same message on DOTNET-CLR a couple of
>days ago.But I hada no replies there.
>
>
>Here is the code that works syncronously and in callback shows
>IAsyncResult.CompletedSynchronously as true.
>-----------------------------------
>try
>{
> OracleConnection conn=ConnectionPool.GetConnection();
> OracleCommand cmd=conn.CreateCommand();
> cmd.CommandText="select xml from xmltable where id in (19785,23930,
>4884, 5966, 5918, 7068, 7069, 3072,21615, 6034, 6038, 7071, 7070, 5151)";
> OracleDataReader reader=null;
> reader=cmd.ExecuteReader();
> while(reader.Read())
> {
> Console.WriteLine("Bringing...");
> AsyncCallback readImageCallback = new
>AsyncCallback(ReadInImageCallback);
> OracleLob NCLOB = reader.GetOracleLob(0);
> StateObject so=new StateObject();
> so.lob=NCLOB;
> so.bytes=new byte[NCLOB.Length * 2];
>
>NCLOB.BeginRead(so.bytes,0,int.Parse((NCLOB.Length*2).ToString()),readImageC
>allback,so);
> }
>}
>catch(Exception byexc)
>{
> CustomEvent.ShowException(byexc); }
>-----------------------------------------------
>
>public void ReadInImageCallback(IAsyncResult asyncResult) {
> StateObject so= (StateObject) asyncResult.AsyncState;
> Console.WriteLine("Syncly:"+asyncResult.CompletedSynchronously);
> OracleLob NCLOB=so.lob;
> nt bytesRead = NCLOB.EndRead(asyncResult);
> string tablo=Encoding.Unicode.GetString(so.bytes);
> NCLOB.Close();
>}
>-----------------------------------
>public class StateObject
>{
> public byte[] bytes;
> public int imageNum;
> public OracleLob lob;
>}
J. Merrill / Analytical Software Corp
===================================
This list is hosted by DevelopMentor� http://www.develop.com
Some .NET courses you may be interested in:
NEW! Guerrilla ASP.NET, 17 May 2004, in Los Angeles
http://www.develop.com/courses/gaspdotnetls
View archives and manage your subscription(s) at http://discuss.develop.com