public void Serve() { var server = new Server { Port = PORT }; bool[] clientSucceeded = new bool[3]; server.ClientConnected += (sender, e) => { Console.WriteLine("Client connected!"); using (var stream = e.Client.GetStream()) { using (var reader = new StreamReader(stream)) { var clientId = int.Parse(reader.ReadLine()); clientSucceeded[clientId] = true; } } e.Client.Close(); }; server.Start(); Task.WaitAll( Task.Run(() => this.CreateClient(0)), Task.Run(() => this.CreateClient(1)), Task.Run(() => this.CreateClient(2)) ); server.Stop(); server.Wait(); Assert.True(clientSucceeded[0], $"Client 0 should have succeeded"); Assert.True(clientSucceeded[1], $"Client 1 should have succeeded"); Assert.True(clientSucceeded[2], $"Client 2 should have succeeded"); }