public async Task RunAsync() { Listener.Listen(8); var activeTasks = new List <Task>(); activeTasks.Add(Listener.AcceptAsyncNew()); while (activeTasks.Count > 0) { Debug.WriteLine("loop"); var finished = await Task.WhenAny(activeTasks); activeTasks.Remove(finished); Debug.WriteLine("finished one"); var acceptTask = finished as Task <Socket>; if (acceptTask != null) { Debug.WriteLine("got client"); try { var client = acceptTask.Result; activeTasks.Add(HandleClientAsnyc(client)); // and listen for another one activeTasks.Add(Listener.AcceptAsyncNew()); } catch (AggregateException e) { if (!(e.InnerExceptions.Single() is InvalidOperationException)) { throw; } // else disposed, just ignore and shutdown } } else { // client finished, maybe there was an exception? try { finished.Wait(); } catch (AggregateException e) { Trace.WriteLine(e, "WebSocketServer: Exception while handling client"); } Debug.WriteLine("client rekt"); } } }