Я скажу это сразу.Я любитель потоков.Я старший c # веб-разработчик , но у меня есть проект, который требует, чтобы я заполнил много объектов, на заполнение которых уходит много времени, поскольку для них требуются ответы WebRequests и для заселения.У меня все работает без threading , но оно не работает достаточно быстро для моих требований.Я хотел бы передать все на ThreadPool
, чтобы управлять threading для меня, поскольку я могу поставить в очередь 20 000 потоков одновременно и по понятным причинам.Я не хочу попадать на веб-сайт с запросами, необходимыми для заполнения всех из них одновременно.
Я хотел бы передать объект , заполнить его, а затемдобавьте его в коллекцию в основном потоке после заполнения.Затем, когда все объекты заполнены, продолжайте выполнение программы.Я не знаю, сколько объектов нужно будет заполнить, пока они не будут заполнены.
Мой вопрос ... Как лучше всего это сделать?
Вот цикл, который я пытаюсь ускорить:
foreach (HElement hElement in repeatingTag.RunRepeatingTagInstruction())
{
object newObject = Activator.CreateInstance(currentObject.GetType().GetGenericArguments()[0]);
List<XElement> ordering = GetOrdering(tagInstructions.Attribute("type").Value);
RunOrdering(ordering, newObject, hElement);
MethodInfo method = currentObject.GetType().GetMethod("Add");
method.Invoke(currentObject, new[] { newObject });
}
Не знаюЯ не знаю заранее, что это за объект, поэтому я создаю его с помощью Активатора.Метод RunOrdering проходит через инструкции, которые я передаю, которые сообщают ему, как заполнять объект.Затем я добавляю его в коллекцию.Кроме того, сам объект может иметь свойства, которые требуют, чтобы этот метод выполнялся и заполнял их данные.