Как использовать ThreadPooling - PullRequest
0 голосов
/ 03 февраля 2020

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;
        }
...