У меня есть несколько объектов процессора, которые я использую с ThreadPool, чтобы использовать их в параллельном процессе. Какой процессор я собираюсь использовать, в основном зависит от входящих данных, и может быть более 2000 различных типов; поэтому как только мое приложение запускается, оно создает 1-2K процессоров в словаре и запускает тот, который мне нужен, в соответствии с входящими данными в ThreadPool. Кстати, любой процесс не занимает больше миллисекунды.
Мой псевдо-код для работы в ThreadPool ниже:
public void onIncomingNewData(rawData)
{
if (!ThreadPool.QueueUserWorkItem(processors[rawData.Type.Id].Process, rawData))
{
Console.WriteLine("Work item cannot be queued!");
}
//Thread.Sleep(1);
}
Моя проблема здесь в синхронизации объектов Processer; у них есть свой внутренний кеш, и я не хочу, чтобы несколько потоков выполняли один и тот же метод обработки объектов Process.
На данный момент я использую «блокировку» внутри метода процесса и некоторых других частных методов, которые обрабатывают вызовы методов. Но как лучше всего это сделать?