【发布时间】:2022-01-16 22:43:50
【问题描述】:
我有一个TcpListener,可以启动
public void Start()
{
if (!Listening && !IsDisposed)
{
_socket.Bind(_localEndpoint);
Task.Run(DoListen);
}
}
private async Task DoListen()
{
_socket.Listen();
Listening = true;
try
{
while (Listening)
{
var socket = await _socket.AcceptAsync().ConfigureAwait(false);
NewConnection?.Invoke(new Connection(socket));
}
}
catch (SocketException e)
{
Stop();
}
finally
{
Listening = false;
}
}
然后停了
public void Stop()
{
_socket?.Close();
IsDisposed = true;
Listening = false;
}
如何取消调用Start()启动的任务?
通过使循环条件Listening,我可以确保在评估条件时任务将停止。
但是,只有在接受新连接后才会发生这种情况。
我怎样才能摆脱等待var socket = await _socket.AcceptAsync().ConfigureAwait(false);?
如果在等待AcceptAsync() 时关闭相关的套接字会发生什么?
感谢您的回答!
【问题讨论】: