Estoy usando DotNetty en Unity y tengo el siguiente arranque del cliente, cuando el servidor está inactivo, "clientBootstrap.ConnectAsync()" tardará alrededor de 17 segundos en dejar de intentar establecer una conexión, durante los cuales, el cliente está congelado. En realidad, no necesita intentarlo durante 17 segundos para saber que no puede haber conexión. ¿Cómo puedo configurar para que el "clienteBootstrap.ConnectAsync ()" intente solo durante unos 5 segundos? Agregué ".Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(5000))", pero aun así, se necesitan 17 segundos para dejar de intentarlo. La opción solo activó una excepción de tiempo de espera adicional.
try { var clientBootstrap = new Bootstrap(); clientBootstrap .Group(group) .Channel<TcpSocketChannel>() .Option(ChannelOption.TcpNodelay, true) .Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(1000)) .Handler(new ActionChannelInitializer<ISocketChannel>(channel => { var pipeline = channel.Pipeline; pipeline.AddLast(new IdleStateHandler(0, 0, 6)); ...... })); clientChannel = await clientBootstrap.ConnectAsync(new IPEndPoint(IPAddress.Parse(IP), Port));Muchísimas gracias.
Debería poder establecer un tiempo de espera de acuerdo con esto :
No estoy familiarizado con dotnetty pero aplicado a su fragmento, intentaría algo como:
try { var clientBootstrap = new Bootstrap(); clientBootstrap .Group(group) .Channel<TcpSocketChannel>() .Option(ChannelOption.TcpNodelay, true) .Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(1000)) .Handler(new ActionChannelInitializer<ISocketChannel>(channel => { var pipeline = channel.Pipeline; pipeline.AddLast(new IdleStateHandler(0, 0, 6)); ...... })); int timeout = 5000; var clientChannel = clientBootstrap.ConnectAsync(new IPEndPoint(IPAddress.Parse(IP), Port)); if (await Task.WhenAny(clientChannel, Task.Delay(timeout)) == clientChannel) { // task completed within timeout } else { // timeout logic } }Útil para leer la documentación de retraso de tareas: