У меня есть длительный процесс под названием ImportProductInformation
, вызываемый консольным приложением, которое я пытаюсь ускорить, что является отличным кандидатом на пул потоков, поэтому я немного поискал и наткнулся на SmartThreadPool на CodeProject и пытаюсь его реализовать.
ImportProductInformation
в настоящее время требуется «элемент», который представляет собой просто одну строку структуры объекта, извлеченную из списка. SmartThreadPool
использует делегат с именем "WorkItemCallback"
, но если я создаю его, как показано ниже, он жалуется на "Ожидаемое имя метода" в цикле foreach на smartThreadPool.QueueWorkItem
, так как кажется, что я не могу передать свои параметры делегированному методу. Что мне здесь не хватает? Я уверен, что это что-то глупое ... нубу не хватает опыта работы с делегатами ... любая помощь будет признательна:
public static void ImportProductInformation_Exec()
{
// List
List<productinformation> _list = GetProductInformation();
// Import
if (_list != null)
{
SmartThreadPool smartThreadPool = new SmartThreadPool();
foreach (var item in _list)
{
smartThreadPool.QueueWorkItem
(new WorkItemCallback
(ImportProductInformation(item)));
}
smartThreadPool.WaitForIdle();
smartThreadPool.Shutdown();
}
}
public void ImportProductInformation(productinformation item)
{
// Do work associated with "item" here
}
Если я изменяю цикл на это, я получаю «Метод используется как Тип» в ошибке сборки:
foreach (var item in _list)
{
ImportProductInformation ipi =
new ImportProductInformation(item);
smartThreadPool.QueueWorkItem(new WorkItemCallback(ipi));
}
Закончилась работа с этим:
public class ProductInformationTaskInfo
{
public productinformation ProductInformation;
public ProductInformationTaskInfo(productinformation pi)
{
ProductInformation = pi;
}
}
public class PI
{
foreach (var item in _list)
{
ProductInformationTaskInfo pi =
new ProductInformationTaskInfo(item);
smartThreadPool.QueueWorkItem
(new WorkItemCallback
(ImportProductInformation), pi);
}
public static object ImportProductInformation(Object _pi)
{
ProductInformationTaskInfo pi = (ProductInformationTaskInfo)_pi;
var item = pi.ProductInformation;
// Do work here
}
}