@@ -17,6 +17,7 @@ public class WampSessionClient<TMessage> : IWampSessionClientExtended,
1717 private readonly IWampServerProxy mServerProxy ;
1818 private TaskCompletionSource < bool > mOpenTask = new TaskCompletionSource < bool > ( ) ;
1919 private TaskCompletionSource < GoodbyeMessage > mCloseTask ;
20+ private GoodbyeMessage mGoodbyeMessage ;
2021 private readonly IWampFormatter < TMessage > mFormatter ;
2122 private bool mGoodbyeSent ;
2223 private readonly IWampClientAuthenticator mAuthenticator ;
@@ -117,8 +118,7 @@ public void Goodbye(GoodbyeDetails details, string reason)
117118 }
118119 else
119120 {
120- GoodbyeMessage message = new GoodbyeMessage ( ) { Details = details , Reason = reason } ;
121- mCloseTask ? . SetResult ( message ) ;
121+ mGoodbyeMessage = new GoodbyeMessage ( ) { Details = details , Reason = reason } ;
122122 }
123123 }
124124
@@ -131,12 +131,21 @@ private void RaiseConnectionBroken()
131131
132132 WampSessionCloseEventArgs closeEventArgs = mCloseEventArgs ;
133133
134+ Interlocked . CompareExchange ( ref mIsConnected , 0 , 1 ) ;
135+
136+ GoodbyeMessage goodbyeMessage = mGoodbyeMessage ;
137+
138+ if ( goodbyeMessage != null )
139+ {
140+ mCloseTask ? . SetResult ( goodbyeMessage ) ;
141+ }
142+
134143 SetTasksErrorsIfNeeded ( new WampConnectionBrokenException ( mCloseEventArgs ) ) ;
135144
136- Interlocked . CompareExchange ( ref mIsConnected , 0 , 1 ) ;
137145 mOpenTask = new TaskCompletionSource < bool > ( ) ;
138146 mCloseTask = null ;
139147 mCloseEventArgs = null ;
148+ mGoodbyeMessage = null ;
140149
141150 OnConnectionBroken ( closeEventArgs ) ;
142151 }
0 commit comments