クライアントを同期的に受け入れながら、.net4 で CancellationToken をチェックする方法はありますか。
while (!token.IsCancellationRequested)
{
//change this somehow to use check cancellation but keep this blocking
TcpClient client = _tcpListener.AcceptTcpClient();
var client= new myclient(client);
_clients.Add(telemetryClient);
}
私がこれまでにできる最善のことは、十分にきれいではありません:
while (!token.IsCancellationRequested)
{
var acceptTask = Task<TcpClient>.Factory.FromAsync(_tcpListener.BeginAcceptTcpClient, _tcpListener.EndAcceptTcpClient, null);
var tokenTask = Task.Factory.StartNew(() =>
{
while (!token.IsCancellationRequested)
{
Thread.Sleep(1000);
}
return;
}, token);
Task.WaitAny(new Task[] { acceptTask ,tokenTask}, token);
if (token.IsCancellationRequested)
break;
TcpClient client = acceptTask.Result;//_tcpListener.AcceptTcpClient();
var client = new myclient(client);
_clients.Add(telemetryClient);
}