Wie kündige ich HttpListenerContext.AcceptWebSocketAsync?

Wie kündige ich HttpListenerContext.AcceptWebSocketAsync?

Vielleicht passt die folgende Lösung in Ihrem Fall besser, die auf diesem Artikel basiert.

Dies hört auf zu lauschen, sobald das Abbruchtoken ausgelöst wird, dann können Sie die benutzerdefinierte Logik implementieren, um den Vorgang abzubrechen. In meinem Fall reicht es aus, um die Schleife zu unterbrechen, aber es kann wirklich alles sein, was Sie wollen.

    public void Stop()
    {
        this.Status = ServerStatus.Stopping;

        this.listener.Stop();
        this.cancellationTokenSource.Cancel();

        this.Status = ServerStatus.Stopped;
    }

    private async void ListenForConnections(CancellationToken cancellationToken)
    {
        try
        {
            while (this.Status == ServerStatus.Running)
            {
                var socketTask = this.listener.AcceptSocketAsync();

                var tcs = new TaskCompletionSource<bool>();
                using (cancellationToken.Register(s => ((TaskCompletionSource<bool>)s).TrySetResult(true), tcs))
                {
                    if (socketTask != await Task.WhenAny(socketTask, tcs.Task).ConfigureAwait(false))
                        break;
                }

                var context = new TcpContext(socketTask.Result);

                this.OnConnectionReceived(context);
            }
        }
        catch (ObjectDisposedException)
        {
            // Closed
        }
    }

Hmmm, Sie erhalten Kontext von HttpListener die Anfragen abhört (der Kontext hört sich nicht selbst ab, er umschließt nur Anfragen/Antworten für Sie, soweit ich verstehe). Ich denke, Sie sollten HttpListener.Stop() anrufen Wird es den Zweck erfüllen?