protected override ITcpServerSocketModel RunInternal(ITcpServerSocketModel obj0) { var cb = new ClientBootstrap() .Group(ClientEventLoopGroup) .Channel <TcpSocketChannel>() .Handler(new ActionChannelInitializer <TcpSocketChannel>(ConstructClientPipeline)); var connectTasks = new List <Task <IChannel> >(); for (var i = 0; i < ClientCount; i++) { connectTasks.Add(cb.ConnectAsync(obj0.BoundAddress)); } if (!Task.WaitAll(connectTasks.ToArray(), TimeSpan.FromSeconds(ClientCount * 2))) { throw new TimeoutException( $"Waited {ClientCount} seconds to connect {ClientCount} clients to {obj0.BoundAddress}, but the operation timed out."); } foreach (var task in connectTasks) { // storing our local address for comparison purposes obj0 = obj0.AddLocalChannel(task.Result).AddClient((IPEndPoint)task.Result.LocalAddress); } return(obj0); }