【发布时间】:2010-08-10 08:26:09
【问题描述】:
我需要在线程和事件引发方面具有高超技能的人。
我有一个抽象类A 和两个具体类C1、C2(例如插件)。
由于我需要它们相互通信,例如“plugin-application”“plugin-plugin”通信,我在抽象类中有一个方法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... 但这是正确的方法吗?
已编辑: 我想我正在寻找:同步还是异步方式更适合我的场景?或者,我应该在插件线程中处理应用事件处理程序还是在主线程中的某处同步?
非常感谢您对您的建议做出一些很好的解释
谢谢。
【问题讨论】:
标签: c# multithreading events plugins synchronization