C#中的并行事件处理

时间:2011-06-23 12:01:46

标签: c# multithreading events parallel-processing

我正在开发一个必须处理来自外部系统的许多事件的模块。 我将使用提供事件(OnNewMessage)的第三方类将一些参数作为输入传递,将两个参数作为输出传递,每个事件需要一堆时间才能被处理。我想以并行方式提供这些事件,以避免阻塞调用者并并行处理多个请求。

这是我的代码示例:

void Init()
{
   provider.OnNewMessage += new OnMessageEventHandler(processEvent);
}

void processEvent(string xml, int …, out string resultXML, out string description)
{
   ...
}

在C#3.5中执行此操作的最佳方法是什么?

由于

2 个答案:

答案 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
}

每个调用者请求将立即被一个线程响应,因此不会阻止调用者。完成处理请求后,每个线程都会自动退出,因此系统中的线程不会太多。

这只是一个简单的解决方案。您可能需要考虑线程池以提高性能。