如何处理后台线程上的事件?

时间:2012-08-28 09:16:26

标签: c# multithreading

我有一个以相当快的频率(每100毫秒)发射一个事件的类。为避免减慢此过程,事件处理程序应将处理交给某种后台任务/线程/工作者(而不是在事件处理程序中执行)。

最好的方法是什么?我应该在事件处理程序中使用Task.Factory.StartNew吗?快速创建任务是否会产生开销(例如,5个事件处理程序将每100毫秒创建5个任务)?或者我可以使用BackgroundWorker(在订阅者的构造函数中实例化),并在事件处理程序中调用.RunAsync方法吗?

1 个答案:

答案 0 :(得分:4)

两种方式:

  • 使用Task.Factory.StartNew。此方法依赖于ThreadPool来最小化任务创建成本。在大多数情况下这应该没问题。
  • 如果需要进一步降低性能影响,可以创建生产者/消费者队列。触发事件时,将通知排入队列。另一方面,线程监视队列并在通知到达时处理它们。