Я недавно унаследовал систему, которая использует очень простой подход к обработке рабочих элементов, в основном, это делает их один за другим.Если честно, до недавнего времени это работало хорошо.Тем не менее, мы стремимся реализовать аналогичный процесс для другого типа рабочего элемента, и я изучал параллельную библиотеку задач и думаю, что она будет соответствовать всем требованиям.Тем не менее, у меня есть некоторые опасения по поводу безопасности потоков и, честно говоря, это область, в которой мне не хватает знаний, поэтому я задаю здесь только свой второй вопрос в надежде, что кто-то может дать мне несколько хороших баллов, так как я еще не нашелокончательный ответ да или нет для этого.
Итак, у нас есть класс WorkItem
public class WorkItem
{
public int Id {get; set;}
public string data { get; set;}
}
A List<WorkItem>
, который будет обработан с использованием цикла Parallel.Foreach
.
Parallel.Foreach
вызовет закрытый метод, который, в свою очередь, вызовет статические методы из другой сборки;
//Windows service that will run the Parallel.Foreach
private int MainMethod(WorkItem item)
{
item.Data = Processor.ProcessWorkItemDataProcess1(item.data);
item.Data = Processor.ProcessWorkItemDataProcess2(item.data);
SendToWorkFlow(item);
}
public static class Processor
{
public static string ProcessWorkItemDataProcess1(string data)
{
//Process it here
return string
}
public static string ProcessWorkItemDataProcess2(string data)
{
//Process it here
return string
}
}
и так далее.Все эти методы имеют логику для обработки экземпляра WorkItem на разных этапах.После завершения MainMethod
отправит обработанный WorkItem в систему Workflow.
Мы будем обрабатывать их партиями до 30, чтобы не перегружать другие системы.Мои опасения сводятся к тому, что 30 экземпляров WorkItem
, имеющих доступ к одним и тем же статическим методам, могут вызвать проблемы с целостностью данных.Например, ProcessWorkItemDataProcess2
вызывается с WorkItem1.Data
и впоследствии вызывается с WorkItem2.Data
, и каким-то образом WorkItem2.Data
возвращается, когда оно должно быть WorkItem1.Data
Все статические методы автономны впоскольку они определили логику и будут использовать только (в теории) WorkItem
, с которым она была вызвана.Нет таких методов, как доступ к БД, доступ к файлам и т. Д.
Итак, надеюсь, это объясняет, что я делаю.Должен ли я иметь какие-либо проблемы?Если да, то решит ли потенциальные проблемы создание экземпляра класса Processor
для каждого WorkItem?
Заранее спасибо