У меня есть N потоков, каждый из которых сохраняет данные в переменную private Dictionary<string,myObject> myUploadObject
с областью действия объекта экземпляра.
Как только в этом словаре будет достаточно данных или по прошествии 2 минут я отправлю эту коллекцию на сервер.
Я никогда не сталкивался с этой многопоточной ситуацией и не уверен, как к этому подойти. Вот как я запускаю свой исходный код:
PerfmonClient agent = new PerfmonClient(Machine, Start, Stop, Interval, MaxIterations);
Thread newThread = null;
Console.WriteLine("Creating new thread: " + agent.ToThreadName());
ThreadStart threadDelegate = new ThreadStart(agent.TestLoop);
newThread = new Thread(threadDelegate);
agent.AssociatedThread = newThread;
AgentDictionary.Add(agent.ToThreadName(), agent);
newThread.Start();
Теперь я пытаюсь извлечь данные из объекта agent
и отправить их на сервер. Обычно я бы просто вызывал другой метод в экземпляре PerfmonClient
для этого, но концепция многопоточности заставляет меня дважды проверить свой подход.
Вот несколько способов, которыми я собираюсь взять эти собранные данные и отправить их на сервер:
Создать новый ThreadDelegate для метода agent.upload
, загрузить и запустить его (основной поток или порожденный поток)
Измените внутренний объект Dictionary<string,myObject> myUploadObject
на открытый и статический, и используйте поток threadDelegate / Main для выполнения загрузки.
?? Не уверены, что произойдет, если начальный agent.TestLoop
завершится или произойдет ошибка? Я теряю все данные в объекте agent
? Как мне получить доступ к внутренним данным, когда thread.IsActive == false?
Спасибо, что ответили на эти вопросы ... или указали мне правильное направление. Я не уверен, что я заново изобретаю колесо, и, возможно, мне придется изучить что-то новое.