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");
                }
            }
        }