1

クライアントを同期的に受け入れながら、.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);
        }
4

1 に答える 1