Pavel Borisov created AMQNET-836:
------------------------------------
Summary: UnobservedTaskException in the failover
Key: AMQNET-836
URL: https://issues.apache.org/jira/browse/AMQNET-836
Project: ActiveMQ .Net
Issue Type: Bug
Components: ActiveMQ
Environment: .NET 6
Reporter: Pavel Borisov
When the ActiveMQ becomes inaccessible, and the failover happens, our
applications start to report the following error:
_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 actual unobserved error is a SocketException.
The origin of the issue is in {*}TcpTransportFactory.{*}{*}TryConnectSocket{*}
([github|https://github.com/apache/activemq-nms-openwire/blob/b89b7498d12fe2f68ee5ee248bb2168c62ceaf3a/src/Transport/Tcp/TcpTransportFactory.cs#L240]).
It starts an async task (socket.BeginConnect), but its result is not observed.
The result is checked by the `socket.Connected` only, and in case of failure,
the actual exception in the task stays unobserved and is eventually promoted to
the UnobservedTaskException event.
Also, for APM methods (Begin*), there are End* methods that *must* be called
according to the docs. But the call to EndConnect is missing in
{*}TryConnectSocket{*}, so a socket stays partially invalid after a successful
connection.
The [snippet
here|https://gist.github.com/Inok/9b17282532bca8a01cc5fc0ab9872433] contains
the same code with some logging, and it reproduces the issue (.NET 6, run in
Release mode).
The fix for both problems is probably [something like
this|https://gist.github.com/Inok/666d647b1bb337bcbef8cad02032237f].
--
This message was sent by Atlassian Jira
(v8.20.10#820010)