gpt4 book ai didi

c# - 如何取消 HttpListenerContext.AcceptWebSocketAsync?

转载 作者:可可西里 更新时间:2023-11-01 09:10:44 26 4
gpt4 key购买 nike

它没有取消 token 参数。此外,HttpListenerContext 没有相关的 (Begin/End)AcceptWebSocket 方法。

最佳答案

也许以下解决方案更适合您的情况,它基于此 article .

一旦取消 token 被触发,这将停止监听,然后您就可以实现自定义逻辑来取消操作。在我的例子中,它足以打破循环,但它真的可以是你想要的任何东西。

    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
}
}

关于c# - 如何取消 HttpListenerContext.AcceptWebSocketAsync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com