Page 1 of 1

Asynchronous Method Support

Posted: Mon 01 Nov 2010 19:38
by danfinucane
I installed your product because I want an Oracle ADO.NET provider that offered asynchronous communication to Oracle. After using reflector to look at your assemblies I was disappointed to see that you use Delegate.BeginInvoke to implement your asynchronous methods. Do you have any plans to offer an implementation that implements asynchronous behavior through asynchronous I/O utilizing Windows I/O completion ports? The delegate implementation you currently offer does not really provide any advantage over the synchronous alternative making use of the .NET thread pool.

Thanks.

dan finucane

Posted: Tue 02 Nov 2010 14:59
by StanislavK
Thank you for your suggestion, but at the moment we do not plan to implement functionality for interoperations with Oracle based on I/O Completion Ports. As for the BeginExecuteNonQuery and BeginExecuteReader methods, they are designed for background execution of SQL commands only, and are not supposed to speed up this execution. For example, the standard System.Data.SqlCommand.BeginExecuteReader method has an analogous behaviour.

As I can understand, you want to increase the performance of some data access scenario. Am I correct? If yes, could you please describe this scenario so that we can suggest a way of accelerating it?

Posted: Tue 02 Nov 2010 17:54
by danfinucane
You are not doing the same thing as SqlCommand. SqlCommand is using asynchronous IO at the network level. Asynchronous IO is much more efficient than using a delegate. With async io the work is being done in the network device driver without blocking a .NET thread whereas with the delegate you are blocking on a thread pool thread until the driver finishes its work.

Can a request be put in to the developers to modify your implementation use use async io? My primary reason for considering dotConnect was for it's async execution.

Thanks.

dan finucane

Posted: Wed 03 Nov 2010 14:32
by StanislavK
We will analyze the possibility of using I/O Completion Ports for asynchronous command execution methods. We will inform you here when our investigation is completed.

Posted: Wed 03 Nov 2010 14:34
by danfinucane
Excellent. Thank you.

Posted: Wed 21 Mar 2012 13:37
by mikhail_mikheev
Has something changed in plans to implement async methods properly (i.e. using async IO)?

I've just checked current release 6.78 and found that async methods still just call BeginInvoke on a delegate. It's a pity because dotConnect for Oracle was the last chance to find ADO.Net data provider for Oracle that supports async oprations. In fact current implementation of async methods doesn't have any advantages comparing with ODP.Net from Oracle from perspective of building scalable server applications.

I agree with Mikhail, please add async support

Posted: Wed 21 Mar 2012 14:47
by danfinucane
True async support would, utilizing I/O completion rather than blocking on a delegate, make your product standout. It will be even more noticeable when .NET 4.5 is released with the new async and await keywords making it easier to do async programming.

Thanks.

dan finucane

Posted: Tue 27 Mar 2012 10:23
by Pinturiccio
We will analyze the possibility of using I/O Completion Ports for asynchronous command execution methods but there is no timeframe.

Re: Asynchronous Method Support

Posted: Fri 14 Mar 2014 11:33
by dphansen
Is there any news on this. Calling OracleDataReader.ReadAsync() should behave just like it does on SqlDataReader. I bet you just need to override the DBDataReader.ReadAsync () :D

Thanks in advance for an update on this.

Re: Asynchronous Method Support

Posted: Wed 19 Mar 2014 16:11
by Pinturiccio
We are investigating the issue, but we can't tell any timeframe at the moment.

Re: Asynchronous Method Support

Posted: Wed 07 Oct 2015 14:50
by Richicoder
Reviving this thread. Over a year later and the *Async methods still don't appear to be properly supported. .Net is now more than ever all in on async, proper async.

Re: Asynchronous Method Support

Posted: Fri 09 Oct 2015 10:13
by Pinturiccio
We are still investigating the issue. We will post here when we get any results, but we can't tell any timeframe at the moment.

Re: Asynchronous Method Support

Posted: Mon 27 Mar 2017 14:08
by Skippermix
Pinturiccio wrote:We are still investigating the issue. We will post here when we get any results, but we can't tell any timeframe at the moment.
Has this ever been implemented?
Iam trying to do this:

Code: Select all

            using (var sqlConnection = new OracleConnection(Connectionstring))
            {
                await sqlConnection.OpenAsync();

                string sql = GetCommonSqlQuery(herdIds, true);
                return await
                    sqlConnection.QueryAsync<Animal, Gender, Breed, Animal>(
                        sql,
                        (a, g, b) =>
                        {
                            a.Gender = g;
                            a.Breed = b;
                            return a;
                        });
            }
Using Dapper, but I cant get it to run async, this dont return until the method is done quering the data

This is using version 8.5.506.0 driver

Re: Asynchronous Method Support

Posted: Tue 28 Mar 2017 16:39
by Pinturiccio
Unfortunately the situation is the same, and we can't tell any timeframe at the moment.

Re: Asynchronous Method Support

Posted: Wed 29 Mar 2017 06:09
by Skippermix
Pinturiccio wrote:Unfortunately the situation is the same, and we can't tell any timeframe at the moment.
Guess that means never, its 2017 I am a bit surprised you released a aspnet core driver without await/async