Open
Description
WebsocketTransport.SendAsync (line 168) continuation not executing on same thread due to missing ConfigureAwait(false) which causes deadlocking on _sendLock.WaitAsync.
public override async Task SendAsync(IList<SerializedItem> items, CancellationToken cancellationToken)
{
try
{
await _sendLock.WaitAsync(cancellationToken).ConfigureAwait(false);
if (items[0].Type == SerializedMessageType.Text)
{
var bytes = Encoding.UTF8.GetBytes(items[0].Text);
///// This causes a deadlock on _sendLock.WaitAsync above
//await SendAsync(TransportMessageType.Text, bytes, cancellationToken);
/////// Should be
await SendAsync(TransportMessageType.Text, bytes, cancellationToken).ConfigureAwait(false);
///////
Debug.WriteLine($"[WebSocket⬆] {items[0].Text}");
}
var binary = items.AllBinary();
if (binary.Count > 0)
{
foreach (var b in binary)
{
await SendAsync(TransportMessageType.Binary, b, cancellationToken).ConfigureAwait(false);
}
Debug.WriteLine($"[WebSocket⬆]0️⃣1️⃣0️⃣1️⃣ x {binary.Count}");
}
}
finally
{
_sendLock.Release();
}
}
Metadata
Metadata
Assignees
Labels
No labels