Skip to Main Content

ODP.NET

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

UnobservedTaskException on connection timeout

Daniel OlsenJul 8 2025

We recently upgraded our Oracle.ManagedDataAccess.Core version along with moving to .NET 8.0 but we are seeing an issue when we experience connection time outs.

When I do the following in a .NET 8.0 WPF application but the host I am pointing to is not reachable we are seeing a UnobservedTaskException being handled.

var oracleConnectionStringBuilder = new OracleConnectionStringBuilder
{
   UserID = "XXX",
   Password = "XXX",
   DataSource = $"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XXX) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = XXX)))"
};

using var x = new OracleConnection(oracleConnectionStringBuilder.ConnectionString);

await x.OpenAsync();

Results in the following exception:

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-50201: Oracle Communication: Failed to connect to server or failed to parse connect string
 ---> OracleInternal.Network.NetworkException (0x80004005): ORA-50201: Oracle Communication: Failed to connect to server or failed to parse connect string
 ---> OracleInternal.Network.NetworkException (0x80004005): ORA-12170: Cannot connect. TCP Connect timeout of 20000 for  host X.X.X.X port 1521. (CONNECTION_ID=XXXXXXXXXXXXXXXXXXXXXXXX)
https://docs.oracle.com/error-help/db/ora-12170/
   at OracleInternal.Network.TcpTransportAdapter.ConnectIterate()
   at OracleInternal.Network.OracleCommunication.ConnectViaCO(ConnectionOption connOption, AddressResolution addrRes, Boolean bAsync)
   at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor, Boolean bAsync)
   at OracleInternal.Network.OracleCommunication.Connect(String tnsDescriptor, Boolean doNAHandshake, String IName, ConnectionOption CO, Boolean bAsync)
   at OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession, OracleConnection connRefForCriteria, String instanceName, Boolean bAsync)
   at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPassw, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch, Boolean bAsync)
   at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassw, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch, Boolean bAsync)
   at OracleInternal.ConnectionPool.PoolManager`3.WaitForPendingGet()
--- End of stack trace from previous location ---
   at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.GetAsync(ConnectionString cs, PM conPM, ConnectionString pmCS, OracleOpaqueString opaquePassw, OracleOpaqueString securedProxyPassw, OracleConnection connRefForCriteria, Boolean bAsync)
   at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenInternalAsync(Boolean bAsync)
   at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsyncHelper(CancellationToken cancellationToken)
   at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsyncHelper(CancellationToken cancellationToken)
   at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsync(CancellationToken cancellationToken)

And the following TaskScheduler.UnobservedTaskException being handled by my application.

System.AggregateException: A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. (The I/O operation has been aborted because of either a thread exit or an application request.)
 ---> System.Net.Sockets.SocketException (995): The I/O operation has been aborted because of either a thread exit or an application request.
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
   --- End of inner exception stack trace ---

We are using 23.9.0 of Oracle.ManagedDataAccess.Core.

Was anything changed that would cause this when upgrading from 2.19.230?

Comments
Post Details
Added on Jul 8 2025
10 comments
200 views