2016-12-05 3 views
-3

Пожалуйста, обратите внимание, что это должен быть только код .NET 4.0! Разрешены использование ключевых слов async/await и Task. Но в .NET 4.0 нет таких методов, как WhenAny().C# .net 4.0 дроссельный шаблон для asyncronous скачать

У меня есть задача программки функции, которая будет:

///Return the content of required uris. 
/// Method has to use the asynchronous way. 
/// maxConcurrentStreams parameter should control the maximum of 
/// concurrent streams that are running at the same time (throttling). 

/// <param name="uris">Sequence of required uri</param> 
/// <param name="maxConcurrentStreams">Max count of concurrent request streams</param> 
/// <returns>The sequence of downloaded url content</returns> 
public static IEnumerable<string> GetUrlContentAsync(this IEnumerable<Uri> uris, int maxConcurrentStreams) 
{ 
.... ??? 
} 

Зв Вопрос заключается в загрузке строковых данных (только html) с помощью uri с максимальным одновременным strem, который работает одновременно (дросселирование).

+0

Что означает «.NET 4.0 only»? .NET 4.0 больше не поддерживается, а C# 6.0 - с версией 4.5. Самая ранняя поддерживаемая версия .NET - 4.5.2. TLS 1.2 поддерживается только с 4.5.2 и более поздними версиями, поэтому все TCP-соединения должны быть нацелены на 4.5.2, по крайней мере, –

+0

Какое дросселирование вы хотите? Задайте это в тексте вопроса, а не в комментариях. –

+0

что вы пробовали? – tym32167

ответ

0

Если у вас await в .NET 4.0, у вас также есть TaskEx.WhenAny.

варианты:

  1. Build an AsyncSemaphore
  2. Использование TPL Dataflow (от here)
  3. Использование Reactive Extensions (от here)

С любой из этих подходов, тип возврата IEnumerable<T> вероятно, неверно, если вы не используете , чтобы загрузить все до получения первого результата.

Смежные вопросы