Я не знаю, как правильно закрыть TcpListener, пока асинхронный метод ожидает входящих соединений. Я нашел этот код на SO, вот код:
public class Server
{
private TcpListener _Server;
private bool _Active;
public Server()
{
_Server = new TcpListener(IPAddress.Any, 5555);
}
public async void StartListening()
{
_Active = true;
_Server.Start();
await AcceptConnections();
}
public void StopListening()
{
_Active = false;
_Server.Stop();
}
private async Task AcceptConnections()
{
while (_Active)
{
var client = await _Server.AcceptTcpClientAsync();
DoStuffWithClient(client);
}
}
private void DoStuffWithClient(TcpClient client)
{
// ...
}
}
И главное:
static void Main(string[] args)
{
var server = new Server();
server.StartListening();
Thread.Sleep(5000);
server.StopListening();
Console.Read();
}
Исключение выбрано в этой строке
await AcceptConnections();
когда я вызываю Server.StopListening(), объект удаляется.
Итак, мой вопрос: как я могу отменить AcceptTcpClientAsync() для правильного закрытия TcpListener.