2

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

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

4

1 回答 1

4

两种方式:

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