Limitando solicitações simultâneas usando Rx e SelectMany

Eu tenho uma lista de URLs de páginas que eu quero baixar simultaneamente usandoHttpClient. A lista de URLs pode ser grande (100 ou mais!)

Atualmente, tenho este código:

var urls = new List<string>
            {
                @"http:\\www.amazon.com",
                @"http:\\www.bing.com",
                @"http:\\www.facebook.com",
                @"http:\\www.twitter.com",
                @"http:\\www.google.com"
            };

var client = new HttpClient();

var contents = urls
    .ToObservable()
    .SelectMany(uri => client.GetStringAsync(new Uri(uri, UriKind.Absolute)));

contents.Subscribe(Console.WriteLine);

O problema: devido ao uso deSelectMany, um grande número de tarefas é criado quase ao mesmo tempo. Parece que, se a lista de URLs for grande o suficiente, muitas tarefas darão tempo limite (estou recebendo"Uma tarefa foi cancelada" exceções).

Então, pensei que deveria haver uma maneira, talvez usando algum tipo de Agendador, de limitar o número de tarefas simultâneas, não permitindo mais de 5 ou 6 em um determinado momento.

Dessa forma, eu poderia obter downloads simultâneos sem iniciar muitas tarefas que podem ficar paralisadas, como acontece agora.

Como fazer isso para não saturar com muitas tarefas com tempo limite esgotado?

Muito obrigado.

questionAnswers(3)

yourAnswerToTheQuestion