Мне нужен кто-то с высокими навыками работы с потоками и создания событий.
У меня есть абстрактный класс A
и два конкретных класса C1
, C2
(например, плагины).
Поскольку мне нужно, чтобы они общались друг с другом, как, например, «плагин-приложение», «плагин-плагин», у меня есть метод ExecuteCommand
в абстрактном классе, который должен выполнить это.Эта функция вызывает event
для приложения, чтобы обработать определенную команду и вернуть результат (например, если одному плагину требуются данные из приложения, он вызывает ExecuteCommand
из базы и ждет результата, который поступает с обработчиком событийобрабатывается по заявке).
protected object ExecuteCommand(SvcCmdType cmdType, params object[] inputParams)
{
// this code has been simplified
SvcCommandEventArgs eventArgs = new SvcCommandEventArgs(cmdType, inputParams);
// generate processing command event (it requires to fill in the result)
OnProcessingAppCommand(this, eventArgs);
return eventArgs.OutputParamsList;
}
Проблема :
Если каждый из C1
и C2
имеют разныепотоки позади и одновременный вызов ExecuteCommand
из своих собственных потоков, тогда точно мой дизайн будет нарушен, а возвращаемый результат будет неожиданным.
Каков лучший дизайн для этого сценария?Я думал использовать внутри ExecuteCommand
асинхронные вызовы, например AsyncOperation
... но правильно ли это?
отредактировано: Наверное, я ищу: синхронноили асинхронный способ лучше для моего сценария?Или мне нужно обработать обработчик событий приложения внутри потока плагина или синхронизировать его где-нибудь в моем основном потоке?
Буду очень признателен за хорошее объяснение ваших рекомендаций
Спасибо.