我正在开发一个必须处理来自外部系统的许多事件的模块。 我将使用提供事件(OnNewMessage)的第三方类将一些参数作为输入传递,将两个参数作为输出传递,每个事件需要一堆时间才能被处理。我想以并行方式提供这些事件,以避免阻塞调用者并并行处理多个请求。
这是我的代码示例:
void Init()
{
provider.OnNewMessage += new OnMessageEventHandler(processEvent);
}
void processEvent(string xml, int …, out string resultXML, out string description)
{
...
}
在C#3.5中执行此操作的最佳方法是什么?
由于
答案 0 :(得分:5)
我会使用队列来存储事件,然后从线程池中的一个线程中使用该队列。
答案 1 :(得分:-2)
以下是修改后的答案:
您不想阻止调用者,并且您还希望调用者等待输出。然后我认为你需要的是一个Web服务。您为该任务定义Web服务。并且调用者调用Web服务以获得结果。 Web服务支持并行处理。
我建议您使用WCF。 WCF具有请求/回复消息模式,其中一个端点从第二端点请求数据。第二个端点回复。 WCF是一个很大的话题,我很抱歉我不能深入了解这里的细节。但您可以轻松地从this video开始。这里有more videos给你。
====================以下是旧答案===================
您可以为每个事件开始一个新线程:
void processEvent(string xml, int …, out string resultXML, out string description)
{
new Thread(Handler).Start(xml);
}
void Handler(object xml)
{
//do the actual work here
}
每个调用者请求将立即被一个线程响应,因此不会阻止调用者。完成处理请求后,每个线程都会自动退出,因此系统中的线程不会太多。
这只是一个简单的解决方案。您可能需要考虑线程池以提高性能。