Skip to content

Commit e0caf3a

Browse files
committed
Fixed parallel send problem
1 parent 3c9fee5 commit e0caf3a

1 file changed

Lines changed: 19 additions & 9 deletions

File tree

TS3QueryLib.Core.Framework/AwaitableQueryDispatcher.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)