ThreadPooling. У меня есть эта программа, которая очищает данные продукта. В моем текущем контексте я получаю кучу индексов (113978 индексов), а затем перед каждым индексом я извлекаю данные о продукте (надеюсь, я получу 113978 продуктов в конце).
Но это будет длиться вечно, так как каждый product имеет ряд различных данных, которые он выводит на экран изображения продукта FX в виде байтовых массивов и списка функций продукта.
Я просмотрел примеры в inte rnet и нашел этот пример
//Sample 02: Define Task/Wait Callback function
private static void
TaskCallBack(Object ThreadNumber)
{
string ThreadName = "Thread " +
ThreadNumber.ToString();
for (int i =1; i < 10; i++)
Console.WriteLine(ThreadName
+ ": " + i.ToString());
Console.WriteLine(ThreadName
+ "Finished...");
}
static void Main(string[] args)
{
//Sample 03: Create Thread Pool
for (int task = 1; task < 51; task++)
ThreadPool.QueueUserWorkItem(
new WaitCallback(TaskCallBack), task);
Thread.Sleep(10000);
}
Поскольку раньше я никогда не работал с ThreadPools, я очень не уверен, как преобразовать свою функцию для использования этого примера кода.
Моя функция:
public static List<Product> GetAllProductsFromIndexes(List<IndexModel> indexes) {
List<Product> products = new List<Product>();
foreach (IndexModel index in indexes)
{
Product product = new Product();
byte[] unconvertedByteArray;
string xml;
string url = @"https://data.Icecat.biz/export/freexml.int/en/";
unconvertedByteArray = DownloadIcecatFile(index.IndexNumber.ToString() + ".xml", url);
xml = Encoding.UTF8.GetString(unconvertedByteArray);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
GetProductDetails(product, xmlDoc);
XmlNodeList nodeList =
(xmlDoc.SelectNodes("ICECAT-interface/Product/ProductFeature"));
product.FeaturesLink = GetProductFeatures(product, nodeList);
nodeList =
(xmlDoc.SelectNodes("ICECAT-interface/Product/ProductGallery/ProductPicture"));
product.Images = GetProductImages(nodeList);
products.Add(product);
}
Console.WriteLine($"Passed in {indexes.Count} indexes, recieved {products.Count} products");
return products;
}