I am working on a console application using C# and .NET Core, where I have implemented a WebSocket. However, I am encountering an error when sending data to clients connected to the WebSocket. The error message is as follows:
"This method may not be called when another write operation is pending."
This error seems to occur more frequently as the number of clients and data flow increases. The relevant line of code causing the error is:
Код: Выделить всё
await stream
.WriteAsync(buffers, 0, buffers.Length, this.CancelToken.Token)
.ConfigureAwait(false);
All code:
Код: Выделить всё
private async Task NetStreamSendAsync(byte[] buffers, OpCode opCode = OpCode.Text)
{
try
{
if (!this.Active) return await Task.FromResult(-2).ConfigureAwait(false);
if (!this.Connected)
{
this.OnClientError?.Invoke(this, this.EndPoint, new SocketException((int)SocketError.NotConnected));
return -1;
}
if ((opCode == OpCode.Text || opCode == OpCode.Binary) && (buffers == null || buffers.Length == 0)) return 0;
var stream = this.GetSslStream();
if (stream == null) return -1;
if (this.ConnectionType == ConnectionType.WebSocket)
{
using (var packet = new WebSocketPacket(this))
buffers = packet.Packet(buffers, opCode);
}
else
if (buffers == null || buffers.Length == 0)
return await Task.FromResult(0).ConfigureAwait(false);
try
{
await stream.WriteAsync(buffers, 0, buffers.Length, this.CancelToken.Token).ConfigureAwait(false);
await stream.FlushAsync(this.CancelToken.Token);
this.LastMessageTime = DateTime.Now;
}
catch (Exception e)
{
LogHelper.Debug($"{SkipData++} - Error: {e.Message} - Veri: {Encoding.GetString(buffers)}");
this.OnClientError?.Invoke(this, this.EndPoint, new SocketException((int)SocketError.SocketError));
}
return await Task.FromResult(buffers.Length).ConfigureAwait(false);
}
catch (Exception e)
{
LogHelper.Debug($"[NetStreamSendAsync] Error: {e}");
Console.WriteLine($"[NetStreamSendAsync] Error: {e}");
throw;
}
}
Источник: https://stackoverflow.com/questions/781 ... r-write-op
Мобильная версия