public async void Run() { try { _listener.Start(); Running = true; while (Running) { Console.WriteLine("\nWaiting for connection..."); List <Task> tasks = new List <Task>(); if (tasks.Count > 10) { var array = tasks.ToArray(); int taskIndex = Task.WaitAny((array)); await array[taskIndex]; tasks.Remove(array[taskIndex]); } IClient connection = _listener.AcceptTcpClient(); Task clientTask = Task.Run(() => ProcessRequest(connection)); tasks.Add(clientTask); Console.WriteLine("Connected!\n"); } Running = false; _listener.Stop(); } catch (SocketException ex) { Console.WriteLine("Connection error occurred: " + ex.Message); } catch (Exception ex) { Console.WriteLine("There was a problem: " + ex.Message); } }