@@ -85,50 +85,58 @@ private void HandshakePendingQueueCheckingCallback(object state)
8585 {
8686 _checkingTimer . Change ( Timeout . Infinite , Timeout . Infinite ) ;
8787
88- while ( true )
88+ var openHandshakeTimeTask = Task . Run ( ( ) =>
8989 {
90- WebSocketSession session ;
90+ while ( true )
91+ {
92+ WebSocketSession session ;
9193
92- if ( ! _openHandshakePendingQueue . TryPeek ( out session ) )
93- break ;
94+ if ( ! _openHandshakePendingQueue . TryPeek ( out session ) )
95+ break ;
9496
95- if ( session . Handshaked || session . State == SessionState . Closed || ( session is IAppSession appSession && appSession . Channel . IsClosed ) )
96- {
97- //Handshaked or not connected
97+ if ( session . Handshaked || session . State == SessionState . Closed || ( session is IAppSession appSession && appSession . Channel . IsClosed ) )
98+ {
99+ //Handshaked or not connected
100+ _openHandshakePendingQueue . TryDequeue ( out session ) ;
101+ continue ;
102+ }
103+
104+ if ( DateTime . Now < session . StartTime . AddSeconds ( _options . OpenHandshakeTimeOut ) )
105+ break ;
106+
107+ //Timeout, dequeue and then close
98108 _openHandshakePendingQueue . TryDequeue ( out session ) ;
99- continue ;
109+ session . CloseWithoutHandshake ( ) ;
100110 }
111+ } ) ;
101112
102- if ( DateTime . Now < session . StartTime . AddSeconds ( _options . OpenHandshakeTimeOut ) )
103- break ;
113+ var closeHandshakeTimeTask = Task . Run ( ( ) =>
114+ {
115+ while ( true )
116+ {
117+ WebSocketSession session ;
104118
105- //Timeout, dequeue and then close
106- _openHandshakePendingQueue . TryDequeue ( out session ) ;
107- session . CloseWithoutHandshake ( ) ;
108- }
119+ if ( ! _closeHandshakePendingQueue . TryPeek ( out session ) )
120+ break ;
109121
110- while ( true )
111- {
112- WebSocketSession session ;
122+ if ( session . State == SessionState . Closed )
123+ {
124+ //the session has been closed
125+ _closeHandshakePendingQueue . TryDequeue ( out session ) ;
126+ continue ;
127+ }
113128
114- if ( ! _closeHandshakePendingQueue . TryPeek ( out session ) )
115- break ;
129+ if ( DateTime . Now < session . CloseHandshakeStartTime . AddSeconds ( _options . CloseHandshakeTimeOut ) )
130+ break ;
116131
117- if ( session . State == SessionState . Closed )
118- {
119- //the session has been closed
132+ //Timeout, dequeue and then close
120133 _closeHandshakePendingQueue . TryDequeue ( out session ) ;
121- continue ;
134+ //Needn't send closing handshake again
135+ session . CloseWithoutHandshake ( ) ;
122136 }
137+ } ) ;
123138
124- if ( DateTime . Now < session . CloseHandshakeStartTime . AddSeconds ( _options . CloseHandshakeTimeOut ) )
125- break ;
126-
127- //Timeout, dequeue and then close
128- _closeHandshakePendingQueue . TryDequeue ( out session ) ;
129- //Needn't send closing handshake again
130- session . CloseWithoutHandshake ( ) ;
131- }
139+ Task . WhenAll ( openHandshakeTimeTask , closeHandshakeTimeTask ) ;
132140
133141 _checkingTimer ? . Change ( _options . CheckingInterval * 1000 , _options . CheckingInterval * 1000 ) ;
134142 }
0 commit comments