public async Task StartServer(int maxClients = 100) { ServerCancellationTokenSource = new CancellationTokenSource(); Listener.Start(ServerPort); var taskStarted = false; var task = Task.Run(async() => { var numberOfAttachedClients = 0; ServerCancellationTokenSource.Token.ThrowIfCancellationRequested(); taskStarted = true; while (true) { if (numberOfAttachedClients < maxClients) { var client = await Listener.AcceptNetworkClientAsync(ServerName); if (client != null) { numberOfAttachedClients++; OnClientConnected?.Invoke(this, client.ClientName); await StartSession(client); } } await Task.Delay(1); } }, ServerCancellationTokenSource.Token); while (!taskStarted) { await Task.Delay(1); } }