我在循环中调用下面的方法,虽然它是真的,这会导致自动重新连接.由于我使用的是using
关键字,它是在每个try/catch return false
上处理ClientWebSocket,还是在到达ConnectAsync末尾时只处理if?
private async Task<bool> ConnectAsync(CancellationToken cancellationToken)
{
using var clientWebSocket = new ClientWebSocket(); // TODO: Check if it's actually disposed
_clientWebSocket = clientWebSocket;
try
{
await clientWebSocket.ConnectAsync(new Uri(_url), cancellationToken);
}
catch
{
return false;
}
try
{
while (clientWebSocket.State == WebSocketState.Open && !cancellationToken.IsCancellationRequested)
{
var bytesReceived = new ArraySegment<byte>(new byte[1024]);
var receiveResult = await clientWebSocket.ReceiveAsync(bytesReceived, cancellationToken);
var message = Encoding.UTF8.GetString(bytesReceived.Array, 0, receiveResult.Count);
...
}
}
catch
{
return false;
}
try
{
if (clientWebSocket.State == WebSocketState.Open)
{
await clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "bye", CancellationToken.None);
}
}
catch
{
return false;
}
return true;
}