@@ -58,17 +58,29 @@ private Uri ServerUri
5858
5959 private readonly Dictionary < int , Action < IAckMessage > > _ackHandlers = new ( ) ;
6060 private readonly Dictionary < int , Func < IAckMessage , Task > > _funcHandlers = new ( ) ;
61+ private TaskCompletionSource < Exception > _connCompletionSource = new ( ) ;
6162 public SocketIOOptions Options { get ; }
6263 public event EventHandler < Exception > OnReconnectError ;
6364 public event EventHandler OnPing ;
6465 public event EventHandler < TimeSpan > OnPong ;
6566
6667 public async Task ConnectAsync ( )
6768 {
68- await ConnectAsync ( CancellationToken . None ) ;
69+ await ConnectAsync ( CancellationToken . None ) . ConfigureAwait ( false ) ;
6970 }
7071
7172 public async Task ConnectAsync ( CancellationToken cancellationToken )
73+ {
74+ _ = ConnectCoreAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
75+ var task = Task . Run ( async ( ) => await _connCompletionSource . Task . ConfigureAwait ( false ) , cancellationToken ) ;
76+ var ex = await task . ConfigureAwait ( false ) ;
77+ if ( ex != null )
78+ {
79+ throw ex ;
80+ }
81+ }
82+
83+ private async Task ConnectCoreAsync ( CancellationToken cancellationToken )
7284 {
7385 var attempts = Options . Reconnection ? Options . ReconnectionAttempts : 1 ;
7486 for ( int i = 0 ; i < attempts ; i ++ )
@@ -81,9 +93,10 @@ public async Task ConnectAsync(CancellationToken cancellationToken)
8193 using var cts = new CancellationTokenSource ( Options . ConnectionTimeout ) ;
8294 try
8395 {
84- await session . ConnectAsync ( cts . Token ) ;
96+ await session . ConnectAsync ( cts . Token ) . ConfigureAwait ( false ) ;
8597 _session = session ;
8698 _session . Subscribe ( this ) ;
99+ // _sessionCompletionSource.SetResult(true);
87100 }
88101 catch ( Exception e )
89102 {
@@ -92,10 +105,11 @@ public async Task ConnectAsync(CancellationToken cancellationToken)
92105 OnReconnectError ? . Invoke ( this , ex ) ;
93106 if ( i == attempts - 1 )
94107 {
108+ _connCompletionSource . SetResult ( ex ) ;
95109 throw ex ;
96110 }
97111 var delay = Random . Next ( Options . ReconnectionDelayMax ) ;
98- await Task . Delay ( delay , CancellationToken . None ) ;
112+ await Task . Delay ( delay , CancellationToken . None ) . ConfigureAwait ( false ) ;
99113 }
100114 }
101115 }
@@ -163,12 +177,12 @@ private async Task HandleAckMessage(IMessage message)
163177 }
164178 }
165179
166- private Task HandleConnectedMessage ( IMessage message )
180+ private async Task HandleConnectedMessage ( IMessage message )
167181 {
168182 var connectedMessage = ( ConnectedMessage ) message ;
169183 Id = connectedMessage . Sid ;
170184 Connected = true ;
171- return Task . CompletedTask ;
185+ _connCompletionSource . SetResult ( null ) ;
172186 }
173187
174188 private void HandlePongMessage ( IMessage message )
0 commit comments