作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
它没有取消 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/
它没有取消 token 参数。此外,HttpListenerContext 没有相关的 (Begin/End)AcceptWebSocket 方法。 最佳答案 也许以下解决方案更适合您的情况,它基于此
什么是子协议(protocol)? http://msdn.microsoft.com/en-us/library/system.net.httplistenercontext.acceptwebso
我是一名优秀的程序员,十分优秀!