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

C# 如何处理后台线程上的事件?,c#,multithreading,C#,Multithreading,我有一个类,它以相当快的频率每100毫秒触发一次事件。为了避免减慢这个过程,事件处理程序应该将处理交给某种后台任务/线程/工作者,而不是在事件处理程序中进行 最好的方法是什么?我应该在事件处理程序中使用Task.Factory.StartNew吗?如此快速地创建任务是否会产生开销,例如,5个事件处理程序将每100ms创建5个任务?或者我可以使用订阅服务器构造函数中实例化的BackgroundWorker,并在事件处理程序中调用.RunAsync方法吗?有两种方法: 或者使用Task.Factor

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

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

有两种方法:

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

或者使用Task.Factory.StartNew。此方法依赖于线程池来最小化任务创建成本。在大多数情况下,这应该是可以的。 如果需要进一步降低性能影响,可以创建生产者/消费者队列。触发事件时,将通知排入队列。另一方面,线程监视队列并在通知到达时处理通知。
如果需要按顺序处理事件,第二个选项也很有用。如果需要按顺序处理事件,BlockingCollectionnew ConcurrentQueueSecond选项也很有用。BlockingCollectionnew ConcurrentQueue