File tree Expand file tree Collapse file tree
TS3QueryLib.Core.Framework Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -54,7 +54,8 @@ public class AwaitableQueryDispatcher : IQueryDispatcher
5454 private StreamWriter ClientWriter { get ; set ; }
5555 private NetworkStream ClientStream { get ; set ; }
5656 protected SynchronizationContext SyncContext { get ; set ; }
57-
57+ private SemaphoreSlim SendLock { get ; } = new SemaphoreSlim ( 1 , 1 ) ;
58+
5859 #endregion
5960
6061 #region Constructor
@@ -132,17 +133,26 @@ public string Send(string messageToSend)
132133
133134 public async Task < string > SendAsync ( string messageToSend )
134135 {
135- await SendAsync ( ClientWriter , messageToSend ) ;
136+ await SendLock . WaitAsync ( ) ;
136137
137- do
138+ try
138139 {
139- if ( MessageResponses . TryDequeue ( out var result ) )
140- return result ;
140+ await SendAsync ( ClientWriter , messageToSend ) ;
141141
142- await Task . Delay ( TimeSpan . FromMilliseconds ( 10 ) ) . ConfigureAwait ( false ) ;
143- } while ( Connected ) ;
142+ do
143+ {
144+ if ( MessageResponses . TryDequeue ( out var result ) )
145+ return result ;
144146
145- return null ;
147+ await Task . Delay ( TimeSpan . FromMilliseconds ( 10 ) ) . ConfigureAwait ( false ) ;
148+ } while ( Connected ) ;
149+
150+ return null ;
151+ }
152+ finally
153+ {
154+ SendLock . Release ( ) ;
155+ }
146156 }
147157
148158 protected static async Task SendAsync ( StreamWriter writer , string messageToSend )
@@ -182,7 +192,7 @@ protected async void KeepAliveLoop()
182192 while ( Client != null && KeepAliveInterval . HasValue )
183193 {
184194 await Task . Delay ( KeepAliveInterval . Value ) ;
185- await SendAsync ( ClientWriter , "\n " ) ;
195+ await SendAsync ( "\n " ) ;
186196 }
187197 }
188198
You can’t perform that action at this time.
0 commit comments